Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:来自struct pack()的意外行为_Python - Fatal编程技术网

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'