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

时间:2012-02-08 14:46:57

标签: c# .net guid

当您在.NET中的GUID上调用ToByteArray()时,与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数据库)herehere

1 个答案:

答案 0 :(得分:29)

如果您阅读Examples section from the GUID constructor,您会找到答案:

  

Guid(1,2,3,new byte[]{0,1,2,3,4,5,6,7})创建一个与"00000001-0002-0003-0001-020304050607"对应的Guid。

a是32位整数,b是16位整数,c是16位整数,d只是8个字节。

因为abc是整数类型而不是原始字节,所以在选择显示它们时,它们会受到字节顺序的影响。 RFC for GUID's (RFC4122)表示它们应以大端格式呈现。