我刚刚尝试在Python中使用struct.pack,当我混合类型时,我不理解它的行为
当我试图打包一个char而没有别的东西时,它按预期工作,即
struct.pack("b",1)
Run Code Online (Sandbox Code Playgroud)
给'\x01'.但是一旦我尝试混合不同类型的数据,char就被填充为与此类型一样长,例如
struct.pack("bi",1,1)
Run Code Online (Sandbox Code Playgroud)
给'\x01\x00\x00\x00\x01\x00\x00\x00'.
这是标准行为,为什么?有办法解决吗?
编辑
更简单地说:
>>> struct.calcsize("b")
1
>>> struct.calcsize("i")
4
>>> struct.calcsize("bi")
8
Run Code Online (Sandbox Code Playgroud)
struct.pack通常用于访问内存结构,而不是文件.在内存中,访问在奇数/未对齐地址占用多个字节的数据可能导致异常或性能损失.
这就是为什么编译器对齐数据(通常在4或8字节边界上),而struct Python中的模块也是如此.
要禁用此功能,可以使用格式字符串的第一个字符来设置字节顺序和对齐方式.在你的情况下,试试吧struct.pack("=bi",1,1)
如果您没有指定任何内容,那么隐式@表示"本机字节顺序,大小和对齐".有关其他选项,请参阅文档.
| 归档时间: |
|
| 查看次数: |
1482 次 |
| 最近记录: |