.NET 中的引导字节顺序

2024-04-15

我正在创建一个像这样的GUID

Guid g = new Guid(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF });
Console.WriteLine(g);

这输出

03020100-0504-0706-0809-0a0b0c0d0e0f

根据维基百科 http://en.wikipedia.org/wiki/GuidGUID 中有四个部分,这解释了为什么字节顺序在四组中切换。然而,维基百科文章还指出所有部分都以 Big Endian 格式存储。显然前三部分不是Big Endian。 guid 的 GetBytes() 方法以与创建时使用的顺序完全相同的顺序返回字节。这种行为的解释是什么?


MS 似乎将这五个部分存储在一个结构中。 前 4 部分的长度为 2 或 4 个字节,因此可能以小端格式存储为本机类型(即 WORD 和 DWORD)。最后一部分有 6 个字节长,因此处理方式不同(可能是一个数组)。

规范是否规定 GUID 按大端顺序存储,或者部分存储按该顺序但各个部分可能是特定于实现的?

EDIT:

来自UUID规范 http://www.ietf.org/rfc/rfc4122.txt,第 4.1.2 节。布局和字节顺序(重点是我的):

为了最大限度地减少八位字节内位分配的混乱,UUID
记录定义仅根据字段进行定义
整数个八位位组。这些字段呈现最多
首先是重要的。

...

In 缺乏明确的应用程序或表示协议
与此相反的规范
,UUID 被编码为 128 位对象, 如下:

这些字段被编码为 16 个八位字节,其大小和顺序为 上面定义的字段,并且每个字段都用 Most 进行编码 有效字节在前(称为网络字节顺序)。

可能是 MS 以正确的顺序存储了字节,但没有费心去网络到主机排序 WORD 和 DWORD 部分以进行演示(根据规范,这似乎没问题,至少根据我不熟练的阅读)它。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 中的引导字节顺序 的相关文章

随机推荐