如何在Python中将UUID打包到结构中?

如何在Python中将UUID打包到结构中?,python,struct,uuid,pack,Python,Struct,Uuid,Pack,我有一个UUID,我正在考虑使用UUID.int将它打包成一个结构,它将它转换成一个128位整数。但是没有一个结构格式的字符足够大来存储它,怎么做呢 示例代码: s = struct.Struct('L') unique_id = uuid.uuid4() tuple = (unique_id.int) packed = s.pack(*tuple) 问题是,结构格式“L”只有4个字节…我需要存储16个字节。将其存储为32个字符的字符串有点多。它是一个128位整数,您希望它转换成什么?

我有一个UUID,我正在考虑使用UUID.int将它打包成一个结构,它将它转换成一个128位整数。但是没有一个结构格式的字符足够大来存储它,怎么做呢

示例代码:

s = struct.Struct('L')
unique_id = uuid.uuid4()    
tuple = (unique_id.int)
packed = s.pack(*tuple)

问题是,结构格式“L”只有4个字节…我需要存储16个字节。将其存储为32个字符的字符串有点多。

它是一个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
max\u int64=0xFFFFFFFFFFFFFFFF
packed=struct.pack('>QQ',(u.int>>64)&max\u int64,u.int&max\u int64)
#打开
a、 b=结构解包('>QQ',打包)

unpacket=(a当您使用
uuid
模块时,您只需使用
bytes
成员,该成员将uuid保存为16字节字符串(包含以大端字节顺序排列的六个整数字段):

太长,读不下去了
struct.pack('Post your code sample please.非常好用。我在想可能有一种更简单的方法,比如使用UUID.bytes,但是位转移已经很简单了。但是由于struct只能存储一个字符,我必须以16个单独的字符重复字节。然后在解包后,再将16个字符放在一起。EDIT:看起来它可以存储一个字符tring也是,我会尝试一下。我正在使用的Python版本似乎也对pack中的字符串进行了一些隐式转换,我认为我使用long更安全。我看不出有什么问题,你应该可以使用
stuct.pack(“16s”,packed)
,它将相当于
struct.pack(“16c”,*[c代表c in packed])
(并将重新复制您的字符串)。
u = uuid.uuid4()
packed = u.bytes # packed is a string of size 16
assert u == uuid.UUID(bytes=packed)