Po wywołaniu ToByteArray()
na identyfikatorze GUID w .NET, kolejność bajtów w wynikowej tablicy nie jest tym, czego można oczekiwać w porównaniu do reprezentacji ciągów GUID. Na przykład, dla następujących GUID reprezentowane jako ciąg:Dlaczego Guid.ToByteArray() porządkuje bajty tak, jak to robi?
11223344-5566-7788-9900-aabbccddeeff
Wynik ToByteArray()
to:
44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF
Zauważ, że kolejność pierwszych czterech bajtów jest odwrócona. Również bajty 4 i 5 są zamieniane, a bajty 6 i 7 są zamieniane. Ale ostatnie 8 bajtów jest w tej samej kolejności, w jakiej są one reprezentowane w łańcuchu.
Rozumiem, że to się dzieje. Chciałbym wiedzieć, dlaczego .NET obsługuje to w ten sposób.
W celach informacyjnych można zobaczyć pewną dyskusję i zamieszanie na ten temat (nieprawidłowe przypisanie do baz danych Oracle) here i here.
Zobacz także http://stackoverflow.com/questions/8064648/net-native-guid-conversion i [ten blog Eric Lippert z ** 2004 **!] (Http://blogs.msdn.com/b /ericlippert/archive/2004/05/25/141525.aspx) – AakashM
a) to naprawdę nie ma znaczenia. b) to duży mały problem z endianami. –
a) To naprawdę ma znaczenie, kiedy cię ugryzą. Ponadto lepsze zrozumienie nie tylko tego, jak działają, ale także dlaczego działają w ten sposób, pozwala lepiej unikać bycia ugryzionym przez takie sprzeczne z intuicją zachowania. b) Od samego początku było jasne, że chodzi o kwestię endianizmu. Ale jest to szczególnie kłopotliwe, ponieważ ostatnie 8 bajtów zostało w oryginalnej kolejności. Ponadto, jeśli zamierzasz reprezentować GUID jako ciąg szesnastkowy, czy nie ma sensu reprezentować go w kolejności bajtów? –