【发布时间】:2014-05-13 14:53:55
【问题描述】:
我一直在努力理解拆包的工作原理。更具体地说,文档中的这个特定示例最让我困惑,因为当我输入完全相同时,它不会给我相同的输出。 https://docs.python.org/2/library/struct.html#struct-examples
>>> from struct import *
>>> pack('hhl', 1, 2, 3)
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('hhl')
8
8 字节大小是有道理的,但是当我执行 calcsize('hhl') 时,它返回 16。将 pack('hhl', 1, 2, 3) 存储为变量并解压缩它可以正常工作,但使用十六进制值不会.我收到错误“解包需要长度为 16 的字符串参数”,知道问题出在哪里吗?谢谢
【问题讨论】:
-
文档指出该示例是在大端机器上完成的。请注意,大多数 (?) 流行的处理器使用 little-endian 字节排序,因此输出字符串可能不同。只要你解包用 pack 生成的字符串,你就可以了。您还可以强制执行特定的字节排序(请参阅文档)。
-
是的,这就是问题所在。将其格式化为 big-endian 给出了我期望的结果