nic*_*atu 5 python uuid struct pack
我有一个UUID,我正在考虑使用UUID.int打包到一个结构中,它将其转换为128位整数.但是没有一个struct format字符足以存储它,如何去做呢?
示例代码:
s = struct.Struct('L')
unique_id = uuid.uuid4()
tuple = (unique_id.int)
packed = s.pack(*tuple)
Run Code Online (Sandbox Code Playgroud)
问题是,结构格式'L'只有4个字节...我需要存储16.将它存储为32字符串有点多.
Cat*_*lus 12
它是一个128位整数,你期望它变成什么?您可以将其拆分为多个组件 - 例如两个64位整数:
max_int64 = 0xFFFFFFFFFFFFFFFF
packed = struct.pack('>QQ', (u.int >> 64) & max_int64, u.int & max_int64)
# unpack
a, b = struct.unpack('>QQ', packed)
unpacked = (a << 64) | b
assert u.int == unpacked
Run Code Online (Sandbox Code Playgroud)
当您使用uuid模块时,您可以简单地使用bytesmember,它将UUID保存为16字节的字符串(包含以big-endian字节顺序排列的六个整数字段):
u = uuid.uuid4()
packed = u.bytes # packed is a string of size 16
assert u == uuid.UUID(bytes=packed)
Run Code Online (Sandbox Code Playgroud)