Cuando llama al ToByteArray()
en un GUID en .NET, el orden de los bytes en la matriz resultante no es el esperado en comparación con la representación de cadena del GUID. Por ejemplo, para el siguiente GUID representa como una cadena:¿Por qué Guid.ToByteArray() ordena los bytes de la forma en que lo hace?
11223344-5566-7788-9900-aabbccddeeff
El resultado de ToByteArray()
es la siguiente:
44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF
Tenga en cuenta que el orden de los cuatro primeros bytes se invierte. También los bytes 4 y 5 se intercambian y los bytes 6 y 7 se intercambian. Pero los últimos 8 bytes están en el mismo orden en que se representan como en la cadena.
Entiendo que esto está ocurriendo. Lo que me gustaría saber es por qué .NET lo maneja de esta manera.
Como referencia, puede ver un poco de discusión y confusión acerca de esto (bases de datos incorrectas atribuidas a Oracle) here y here.
Ver también http://stackoverflow.com/questions/8064648/net-native-guid-conversion y [este blog de Eric Lippert de ** 2004 **!] (Http://blogs.msdn.com/b /ericlippert/archive/2004/05/25/141525.aspx) – AakashM
a) realmente no importa. b) es un gran pequeño problema endian. –
a) Realmente importa cuando te muerde. Además, tener una mejor comprensión no solo de cómo funcionan las cosas, sino también de por qué funcionan de esa manera, lo hace más capaz de evitar ser mordido por comportamientos contraintuitivos como este. b) Fue bastante claro desde el principio que es un problema de endianidad. Pero es particularmente desconcertante porque los últimos 8 bytes se dejan en su orden original. Además, si va a representar un GUID como una cadena de hex, ¿no tendría más sentido representarlo en el orden de bytes real? –