Подтвердить что ты не робот

Почему Guid.ToByteArray() упорядочивает байты так, как он делает?

Когда вы вызываете ToByteArray() в GUID в .NET, упорядочение байтов в результирующем массиве не то, что вы ожидаете, по сравнению со строковым представлением GUID. Например, для следующего GUID, представленного в виде строки:

11223344-5566-7788-9900-aabbccddeeff

Результатом ToByteArray() является следующее:

44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF

Обратите внимание, что порядок первых четырех байтов отменяется. Также байты 4 и 5 меняются местами, а байты 6 и 7 меняются местами. Но последние 8 байтов находятся в том же порядке, что и они представлены в строке.

Я понимаю, что это происходит. Я хотел бы знать, почему .NET обрабатывает его таким образом.

Для справки вы можете увидеть некоторое обсуждение и путаницу по этому поводу (неверно относится к базам данных Oracle) здесь и здесь.

4b9b3361

Ответ 1

Если вы прочитали раздел Примеры из конструктора GUID, вы найдете ответ:

Guid(1,2,3,new byte[]{0,1,2,3,4,5,6,7}) создает Guid, который соответствует "00000001-0002-0003-0001-020304050607".

a - это 32-разрядное целое число, b - это 16-разрядное целое число, c - это 16-разрядное целое число, а d - всего 8 байтов.

Поскольку a, b и c являются целыми типами, а не сырыми байтами, они могут быть упорядочены по порядку при выборе способа их отображения. В RFC для GUID (RFC4122) говорится, что они должны быть представлены в формате большого конца.