为什么Guid.ToByteArray()按照它的方式排序字节?

Cor*_*rty 46 .net c# guid

当您ToByteArray()在.NET中调用GUID时,结果数组中的字节顺序与GUID的字符串表示形式相比不是您所期望的.例如,对于以下表示为字符串的GUID:

11223344-5566-7788-9900-aabbccddeeff
Run Code Online (Sandbox Code Playgroud)

结果ToByteArray()是这样的:

44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF
Run Code Online (Sandbox Code Playgroud)

请注意,前四个字节的顺序是相反的.字节4和5也交换,字节6和7交换.但是最后的8个字节的顺序与它们在字符串中表示的顺序相同.

我知道这种情况正在发生.我想知道的是.NET为什么会这样处理它.

作为参考,您可以在此处此处看到一些关于此的讨论和混淆(不正确归因于Oracle数据库).

use*_*116 31

如果您从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,bc是整数类型而不是原始字节,所以在选择显示它们时它们会受到字节顺序的影响.在对GUID的(RFC4122)RFC规定,他们应该在big endian格式进行呈现.

  • RFC 4122格式规范适用于如何"在线上"编码GUID,并且仅在没有相反的上下文要求的情况下.也就是说,`ToByteArray`的输出很尴尬,因为little-endian字段打破了字段不经意的二进制可排序性. (4认同)