Python结构,大小由对齐方式更改。

2024-05-15 03:02:47 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我要解包的十六进制代码。 b'ABCDFGHa\x00a\x00a\x00a\x00a\x00a\x00\x00\x00\x00\x00\x01'(这不应该有任何意义)

labels = unpack('BBBBBBBHHHHH5sB', msg)
struct.error: unpack requires a bytes argument of length 24

根据我的统计,这两个值都是length=23,即unpack函数中的格式和十六进制值的长度。我不明白。在

提前谢谢


Tags: 代码labelsbytesmsgerrorlengthstruct意义
2条回答

当数据在自然边界上时,大多数处理器访问数据的速度更快,这意味着大小为2的数据应位于偶数地址上,大小为4的数据应在可被4整除的地址上访问,等等

默认情况下,struct保持此对齐。因为您的结构以7'B'开头,所以会添加一个填充字节来对齐偶数地址上的下一个'H'。为了防止在Python中出现这种情况,请在字符串前面加上“=”。在

示例:

>>> import struct
>>> struct.calcsize('BBB')
3
>>> struct.calcsize('BBBH')
6
>>> struct.calcsize('=BBBH')
5

我认为H在您的7B之后执行2字节对齐

啊哈,对齐信息在http://docs.python.org/library/struct.html的顶部,而不是the definition of the format characters的下方。在

相关问题 更多 >

    热门问题