用本机字节顺序解释struct.pack中的额外填充

本·福格尔

有人可以解释为什么我在struct.pack中使用本机字节顺序时得到额外的字节?

>>> import struct
>>> struct.pack('cI', 'a', 1)
'a\x00\x00\x00\x01\x00\x00\x00'

>>> struct.pack('<cI', 'a', 1)
'a\x01\x00\x00\x00'

因此,本机字节顺序的前面是'a',然后是3-(00个字节)。为什么本地字节顺序具有这些字节,而小端字节顺序或大端字节顺序却没有?

虚假的

这在struct模块文档中进行了解释

注意:默认情况下,打包给定C结构的结果包括填充字节,以维护所涉及C类型的正确对齐;同样,拆箱时也要考虑对齐方式。选择此行为是为了使打包结构的字节与对应的C结构的内存中的布局完全对应。要处理与平台无关的数据格式或忽略隐式填充字节,请使用标准大小和对齐方式,而不是本机大小和对齐方式:有关详细信息,请参见字节顺序,大小和对齐方式。

字节顺序,大小,对齐方式中

....

原始大小和对齐方式是使用C编译器的sizeof表达式确定的这始终与本机字节顺序结合在一起。

...

笔记:

  1. 仅在连续的结构成员之间自动添加填充。
  2. 在编码结构的开头或结尾不添加填充。使用非本机大小和对齐方式(例如,使用'<','>','='和'!')时,不添加填充。
  3. 要将结构的末尾与特定类型的对齐要求对齐,请使用该重复类型为零的该类型的代码结束格式。请参阅示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

struct.pack()中的任意字节值

来自分类Dev

Python 2:为什么此字节串顺序在struct.pack()和struct.unpack()方法中切换?

来自分类Dev

std::string 的解密有额外的填充字节吗?

来自分类Dev

无法解释输出中的额外行

来自分类Dev

在UART通讯中接收额外的字节

来自分类Dev

用3字节填充C中的结构

来自分类Dev

用随机字节填充字节向量

来自分类Dev

Bootstrap在行中的列上创建额外的填充

来自分类Dev

CSS在ul中获得额外的填充

来自分类Dev

基于CSS的导航中的额外填充

来自分类Dev

Bootstrap在行中的列上创建额外的填充

来自分类Dev

python结构中的填充字节

来自分类Dev

Java中的ByteBuffer字节填充

来自分类Dev

c中字节的反转顺序

来自分类Dev

用额外的颜色顺序着色形状

来自分类Dev

如何使用struct.pack格式构造字节?

来自分类Dev

struct.pack_into需要更多字节,然后以格式指定

来自分类Dev

在调用swift中读取blob数据额外的参数字节

来自分类Dev

处理霍夫曼压缩/解压缩中的额外字节

来自分类Dev

用cython比struct.pack更快

来自分类Dev

一些iOS设备中的额外填充

来自分类Dev

如何在引导程序中删除额外的填充

来自分类Dev

从CPIO生成的文件中填充了多余的字节

来自分类Dev

删除R / C中的字节顺序标记

来自分类Dev

套接字中的网络字节顺序

来自分类Dev

套接字中的网络字节顺序

来自分类Dev

数据包中的 UDP 字节顺序

来自分类Dev

以特定顺序用数组填充UIPickerView

来自分类Dev

以特定顺序用数组填充UIPickerView