Python 解包问题:解包需要31字节的缓冲区

Python 解包问题:解包需要31字节的缓冲区,python,Python,我可以知道为什么会出现这样的结果吗 代码 结果: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 30 Traceback (most recent call last): File "/home/src/python/sample.py", line 6, in <m

我可以知道为什么会出现这样的结果吗

代码

结果:

b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
30
Traceback (most recent call last):
  File "/home/src/python/sample.py", line 6, in <module>
    body = unpack("10sHBB4sB8sHB", sample)
struct.error: unpack requires a buffer of 31 bytes
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
30
回溯(最近一次呼叫最后一次):
文件“/home/src/python/sample.py”,第6行,在
主体=拆包(“10sHBB4sB8sHB”,样品)
struct.error:解包需要31字节的缓冲区

Python版本:3.9.2

您的格式字符串需要31个字节,因为Python结构默认使用本机对齐方式。因此,它为第二个
H
(无符号短)插入一个填充字节,因为否则它将以奇数偏移量结束(27)。为了避免填充,您必须在格式字符串前面加上
=
标志字符来禁用对齐

>>> from struct import *
>>> calcsize ("10sHBB4sB8sHB")
31
>>> calcsize ("=10sHBB4sB8sHB")
30

这在中有非常详细的解释。

您的格式字符串需要31个字节,因为Python结构默认使用本机对齐。因此,它为第二个
H
(无符号短)插入一个填充字节,因为否则它将以奇数偏移量结束(27)。为了避免填充,您必须在格式字符串前面加上
=
标志字符来禁用对齐

>>> from struct import *
>>> calcsize ("10sHBB4sB8sHB")
31
>>> calcsize ("=10sHBB4sB8sHB")
30

这一点在中有非常详细的解释。

我不确定上述线程是否回答了此处发布的问题,请您解释一下好吗?我正试图用“10sHBB4sB8sHB”解包30字节的数据,但解包需要31字节这是我的问题。您是否尝试将大小设置为31?看起来你的代码在31岁时就可以工作了。为上述道歉似乎是我误读了。31的作品,但它是不是不正确?因为解包需要30个字节。我不确定上面的线程是否回答了这里发布的问题,请解释一下好吗?我正试图用“10sHBB4sB8sHB”解包30字节的数据,但解包需要31字节这是我的问题。您是否尝试将大小设置为31?看起来你的代码在31岁时就可以工作了。为上述道歉似乎是我误读了。31的作品,但它是不是不正确?因为解包需要30个字节。