了解 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,)
我正在开发一个项目,其中包括使用 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,)