struct.pack比其零件更长?

问题描述 投票:1回答:1

我想解包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 again

struct.unpack具有相同的问题,需要32个字节才能解压缩“ HHLHqq”。但是,在我的应用程序中,数据是从外部源发送的,只有26个字节。

我可以将其一个一个地解压缩,但必须确定有一种方法可以禁用此填充吗?

python binary pack
1个回答
1
投票

根据:https://docs.python.org/2/library/struct.html

[使用非本机大小和对齐方式时,例如,与“ ”,“ =”和“!”一起使用。

所以您只需要指定字节序,填充就会消失:

>>> import struct
>>> len(struct.pack("HHLHqq",0,0,0,0,0,0))
40
>>> len(struct.pack("<HHLHqq",0,0,0,0,0,0))
26
>>> 
© www.soinside.com 2019 - 2024. All rights reserved.