Python结构大小不匹配

dto*_*och 4 python struct

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

.... = struct.unpack('I36s36s72sQQIIH4s36s4s20s', datab.read(238))
Run Code Online (Sandbox Code Playgroud)

它工作正常.我通过将值打印到屏幕来看到它.

现在我想将"4s"改为"我".当我将字符串更改为:

.... = struct.unpack('I36s36s72sQQIIHI36s4s20s', datab.read(238))
Run Code Online (Sandbox Code Playgroud)

(先将"4s"更改为"I"),我收到错误:

struct.error: unpack requires a bytes object of length 240
Run Code Online (Sandbox Code Playgroud)

由于文档说"I"大小是4个字节,为什么我的更改会导致错误?

NPE*_*NPE 5

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

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