为什么calcsize("!BHB")和calcsize("BHB")之间存在差异?

Cho*_*hoe 0 python struct

在python 2.4.3中使用struct模块为什么calcsize("!BHB")和calcsize("BHB")之间存在差异?由此; 什么时候

from struct import *
calcsize("!BHB") == 4
calcsize("BHB") == 5
Run Code Online (Sandbox Code Playgroud)

我理解big endian和little endian概念,但是对于上述格式的字节位置而言并没有真正理解它.

Sen*_*ran 5

其原因在Python文档中进行了解释,这是因为当您使用混合结构成员(BHB)时填充问题

  1. 填充仅在连续的结构成员之间自动添加.在编码结构的开头或结尾没有添加填充.

  2. 使用非原生大小和对齐时不添加填充,例如使用'<','>','='和'!'.

看到这个:

>>> struct.pack("BHB",1,1,1)
'\x01\x00\x01\x00\x01'
>>> struct.pack("=BHB",1,1,1)
'\x01\x01\x00\x01'
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,填充添加到Byte,因为它使用默认的原生大小和对齐,并使用'='显式设置标准大小,没有填充.