python:来自struct pack()的意外行为
使用python:来自struct pack()的意外行为,python,Python,使用struct.pack()打包整数时遇到问题 与 我在等你 '\x01\x00\x00\x034\x12\x00' 但是我得到了 '\x01\x00\x00\x004\x12\x00\x00\x00' 我可能遗漏了什么。请帮忙 '\x01\x00\x00\x004\x12\x00\x00\x00' ^ this '4' is not part of a hex escape 实际上与: '\x01\x00\x00\x00\x34\x12\x00\x00
struct.pack()
打包整数时遇到问题
与
我在等你
'\x01\x00\x00\x034\x12\x00'
但是我得到了
'\x01\x00\x00\x004\x12\x00\x00\x00'
我可能遗漏了什么。请帮忙
'\x01\x00\x00\x004\x12\x00\x00\x00'
^ this '4' is not part of a hex escape
实际上与:
'\x01\x00\x00\x00\x34\x12\x00\x00\x00'
因为“4”的ASCII码是0x34
由于使用了默认(本机)格式,Python对数据使用本机对齐,因此第二个字段对齐为偏移量4,并在其前面添加了3个零
要获得更像您想要的结果,请使用
注意默认情况下,打包给定C结构的结果包括填充字节,以便保持C类型的正确对齐
卷入的同样,在拆包时也要考虑对齐。
选择此行为是为了使压缩结构的字节
完全对应于相应C语言内存中的布局
结构。处理与平台无关的数据格式或忽略隐式
填充字节,使用标准大小和对齐方式,而不是本机大小和对齐方式
对齐方式:有关详细信息,请参见字节顺序、大小和对齐方式
您可以通过强制执行字节顺序来获得所需的结果。(chr(0x34)
=='4'
)
'\x01\x00\x00\x00\x34\x12\x00\x00\x00'
>>> struct.pack(">BIB", 1, 0x1234, 0)
'\x01\x00\x00\x124\x00'