Python 结构体大小不匹配。

4

我有一些结构体数据需要从二进制文件中读取。我尝试使用Python的struct模块来完成这个任务。 以下是用于读取的字符串:

.... = struct.unpack('I36s36s72sQQIIH4s36s4s20s', datab.read(238))

它的运行良好。我通过将值打印到屏幕上来看到它。

现在我想把 "4s" 改成应该是的 "I"。当我将字符串更改为:

.... = struct.unpack('I36s36s72sQQIIHI36s4s20s', datab.read(238))

将第一个"4s"更改为"I"后,我遇到了错误:

struct.error: unpack requires a bytes object of length 240

如文档所述,“I”大小为4个字节,为什么我的更改会导致错误?

也许一个虚假的前缀或后缀可以起作用?(x00) - user1467267
1个回答

5

这与对齐有关。 I 需要在四字节边界上对齐,因此需要两个字节的填充。另一方面,4s 没有这样的要求。

请参阅7.3.2.1. 字节顺序、大小和对齐了解如何关闭它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接