了解 Python 的结构 pack/unpack 函数

Understanding Python's struct pack/unpack functions

我正在开发一个项目,其中包括使用 struct 模块及其 pack/unpack 函数以及 python3.6

我已经参考了很多文章,例如 this one 并了解了基本概念,但我无法理解我的用例。

例如:

var = struct.pack('i',1) 
print(var) 

它给出了输出 b'\x01\x00\x00\x00',我可以理解,因为我们提到了 int 作为格式,因此输出是 4 个字节。

现在另一个例子:

var = struct.pack('i', 1156888062)

现在在这种情况下为什么输出 b'\xfe\xb5\xf4D'。谁能解释一下。

还有当我打开它的时候

print(struct.unpack('f', var))

怎么输出是(1957.687255859375,)

>>> struct.pack('i', 1156888062)
b'\xfe\xb5\xf4D'

这仍然是四个字节,只是其中一个字节是可打印的 ASCII 字符 D,所以它显示为那个而不是 \x44。这只是一种不同的表现形式。证明:

>>> len(b'\xfe\xb5\xf4D')
4
>>> b'\x44'
b'D'

对于最后一点,您需要 unpack 使用与打包时相同的格式说明符。您要求将这四个字节解释为浮点数,因此显然它会给您不同的结果。将其更改为 'i',它将按预期工作:

>>> struct.unpack('f', var)
(1957.687255859375,)
>>> struct.unpack('i', var)
(1156888062,)