Python UUID字节序混淆问题

4
我正在使用Python中的uuid包。RFC 4122指出:“UUID记录定义仅根据是八位字节的整数字段来定义。”但是当我尝试使用bytes和bytes_le更改字节顺序时,我发现并非所有uuid字段都被转换:
>>> hx(uuid.UUID("d535fc02-e74f-5015-b8c9-a3b89d760ecd").bytes_le)
b'02fc35d54fe71550>>THIS>>b8c9a3b89d760ecd<<'
>>> hx(uuid.UUID("d535fc02-e74f-5015-b8c9-a3b89d760ecd").bytes)
b'd535fc02e74f5015>>THIS>>b8c9a3b89d760ecd<<'

在上面的输出中,可以看到最后8个字节不管UUID表示的字节顺序如何都不会改变。
现在,假设目标机器是小端字节序,我们收到的UUID按照RFC定义是大端字节顺序,需要将其转换为内部表示,即根据平台表示解析其字段为整数。
我应该反转哪些字节?只反转时间低、时间中和时间高以及版本,并保持时钟序和节点不变吗?
1个回答

2
UUID以大端字节序发送。由平台负责转换为本地字节序,因此您可以使用UUID.fields元组。应将前3个字段转换为整数以便使用。
创建UUID也是同样的道理。您不需要指定fields元组的字节序,因为平台已经知道。
最后8个字节不会被转换,因为它们不是多字节数字。它们是2个一字节时钟值和一个描述节点的6字节字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接