我正在 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<<'
在上面的输出中,可以看出,无论UUID表示的字节序如何,后8个字节都不会改变。
现在,让我们假设目标机器是小端的,我们以大端的字节顺序(根据RFC)接收UUID,并且必须将其转换为内部表示,即根据平台将其字段解析为整数表示形式。
我应该反转哪些字节?我应该只反转低时,中高时和版本,并且时钟seq和节点保持不变吗?
答案 0 :(得分:2)
UUID以大端字节顺序发送。由平台决定是否转换为本地字节序,以便您可以使用UUID.fields
元组。前3个字段应进行转换,以便可以将其用作整数。
创建UUID也是一样。您无需指定fields
元组的字节序,因为平台已经知道。
由于最后的8个字节不是多字节数字,因此不进行转换。它们是2个1字节的时钟值和6个字节的字符串,用于描述节点。