为什么calcsize(“!BHB“)和calcsize(“BHB”)?

2024-10-03 09:07:58 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python2.4.3中使用struct模块,为什么calcsize(“!BHB“)和calcsize(“BHB”)? 据此; 什么时候

from struct import *
calcsize("!BHB") == 4
calcsize("BHB") == 5

我理解big-endian和little-endian的概念,但对于上述格式的字节位置,我并没有真正理解。在


Tags: 模块fromimport概念字节格式structbig
1条回答
网友
1楼 · 发布于 2024-10-03 09:07:58

原因在Python Docs中有解释,这是由于使用混合结构成员(BHB)时的填充问题

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

  2. 使用非本机大小和对齐方式时不添加填充, e、 g.使用“<;”、“>;”、“=”和“!’.

看到这个:

>>> struct.pack("BHB",1,1,1)
'\x01\x00\x01\x00\x01'
>>> struct.pack("=BHB",1,1,1)
'\x01\x01\x00\x01'

在第一种情况下,填充被添加到Byte,因为它使用默认的本机大小和对齐方式,并且您使用“=”显式地设置它的标准大小,因此没有填充。在

相关问题 更多 >