seb*_*ern 7 c++ uuid endianness
我的UUID结构如下:
struct UUID_FIELDS
{
uint32_t time_low;
uint16_t time_mid;
uint16_t time_hi_and_version;
uint8_t clock_seq_hi_and_reserved;
uint8_t clock_seq_low;
uint8_t node[6];
};
Run Code Online (Sandbox Code Playgroud)
我有swap
沿32位边界的功能和swap function
沿16位边界交换的功能.我已经打过电话swap32()
上time_low
,并swap16()
在time_mid
和time_hi_and_version
.我不相信我需要为其余字段交换字节,因为其中两个是8位字段,我已经读过uuid的节点部分没有改变.这是该参考的链接.
问题是当我完成交换时,打印的uuid与转换前的小端的uuid不匹配.
什么是转换之后的UUID正确的方式RFC-4122标准的little endian
到big endian
.当转换时,uuids应该匹配吗?
关于:
更新:以小端开始 uuid:
Run Code Online (Sandbox Code Playgroud)446831D3-FBA1-477B-BB07-CB067B00E86B
正确交换必要字段的结果:
Run Code Online (Sandbox Code Playgroud)FBA1477B-31D3-4468-6BE8-007B06CB07BB
这看起来非常错误。我们可以推断,如果交换是正确的并且仅影响 32 位和 16 位字段,那么在不交换必要字段的情况下,它将是这样的:
Original: 446831D3-FBA1-477B-BB07-CB067B00E86B
| _______/ | _______/
\____ /_______ \____ /______
_____/ \ _____/ \
/ | / |
Received: 7B47A1FB-D331-6844-6BE8-007B06CB07BB # "de-swapped".
Run Code Online (Sandbox Code Playgroud)
您似乎在管道中某处进行了 64 位单元内的字节交换。甚至字节数组也被反转,这表明它可能作为 64 位加载的一部分加载到某个位置,该加载受 swap64 操作的影响。