¿Cómo empaquetar un UUID en una estructura en Python?

Tengo un UUID que estaba pensando en empaquetar en una estructura usando UUID.int, que lo convierte en un entero de 128 bits. Pero ninguno de los caracteres del formato de estructura es lo suficientemente grande para almacenarlo, ¿cómo hacer para hacer esto?

Código de muestra:

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

El problema es que el formato de estructura ‘L’ es solo de 4 bytes … Necesito almacenar 16. Guardarlo como una cadena de 32 caracteres es demasiado.

Es un entero de 128 bits, ¿en qué esperaría que se convirtiera? Puede dividirlo en varios componentes, por ejemplo, dos enteros de 64 bits:

 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 

Mientras utiliza el módulo uuid , simplemente puede usar el miembro de bytes , que contiene UUID como una cadena de 16 bytes (que contiene los seis campos enteros en el orden de bytes big-endian) :

 u = uuid.uuid4() packed = u.bytes # packed is a string of size 16 assert u == uuid.UUID(bytes=packed)