如果指定了字节序,为什么结构体的大小会发生变化,尤其是当字节序与平台的本机字节序匹配时?
示例:
>>> import struct
>>> struct.calcsize("BI")
8
>>> struct.calcsize(">BI")
5
>>> struct.calcsize("<BI")
5
>>>
为什么要添加额外的填充物?
如果未指定字节顺序,则它隐式为“@”,在这种情况下,大小和对齐方式都是本机的。请参阅本文档的“格式字符串”部分。您会注意到“@”是唯一强制对齐的格式字符串前缀。格式字符“I”表示大小为 32 位的无符号整数。格式字符“B”表示无符号字符(8 位)。因此,整数将在 32 位边界上对齐,从而导致填充。当不发生对齐时,打包的字节对象将只是其组成部分总和的大小,在本例中为 1+4==5