4

我有一些我想从二进制文件中读取的结构。我尝试使用python的结构。这是一个用于阅读的字符串:

.... = 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

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

4

1 回答 1

5

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

7.3.2.1。字节顺序、大小和对齐方式以获取有关如何关闭此功能的信息。

于 2013-03-22T14:40:54.993 回答