我想解压缩6个值:2* UInt16,1* UInt32,1* UInt16,2* Int64
把大小加起来,我得到26。
但是python似乎认为应该是32:
>>> a = struct.pack("H",0)
>>> len(a)
2 <-- correct
>>> a = struct.pack("L",0)
>>> len(a)
4 <-- correct
>>> a = struct.pack("q",0)
>>> len(a)
8 <-- correct
>>> a = struct.pack("HHLHqq",0,0,0,0,0,0)
>>> len(a)
32 < -- should be 2 + 2 + 4 + 2 + 8 + 8 = 26
>>> a = struct.pack("HHLHq",0,0,0,0,0)
>>> len(a)
24 < -- should be 2 + 2 + 4 + 2 + 8 = 18
>>> a = struct.pack("HHLH",0,0,0,0)
>>> len(a)
10 <-- correct againstruct.unpack也有同样的问题,需要32字节才能解压缩"HHLHqq“。但是,在我的应用程序中,数据是从外部源发送的,它只有26个字节。
我可以一个一个地解压它作为一个解决办法,但必须有一个方法来禁用这个填充肯定?
发布于 2020-04-23 15:16:57
根据:https://docs.python.org/2/library/struct.html
在使用非本地大小和对齐时,不添加
填充,例如使用“<”、‘’>、‘=’和‘!’。
因此,您只需指定endianness,填充就会消失:
>>> import struct
>>> len(struct.pack("HHLHqq",0,0,0,0,0,0))
40
>>> len(struct.pack("<HHLHqq",0,0,0,0,0,0))
26
>>> https://stackoverflow.com/questions/61390526
复制相似问题