在python 2.4.3中使用struct模块为什么calcsize(“!BHB”)和calcsize(“BHB”)之间存在差异? 由此; 当
from struct import *
calcsize("!BHB") == 4
calcsize("BHB") == 5
我理解big endian和little endian概念,但是对于上述格式的字节位置并没有真正得到它。
答案 0 :(得分:5)
原因在Python Docs中解释,这是因为当您使用混合结构成员(BHB)时出现填充问题
填充仅在连续的结构成员之间自动添加。 在编码结构的开头或结尾没有添加填充。
使用非原生大小和对齐时,不添加填充, 例如使用'<','>','='和'!'。
见:
>>> struct.pack("BHB",1,1,1)
'\x01\x00\x01\x00\x01'
>>> struct.pack("=BHB",1,1,1)
'\x01\x01\x00\x01'
在第一种情况下,填充被添加到Byte,因为它使用默认的原生大小和对齐,并使用'='显式设置标准大小,没有填充。