在Python中打包和解包位和字节



我是Python(我使用的是Python3)和编程的新手。你能提供一个详细的解释,说明如何打包和解包在python中产生答案吗;我知道使用这两个函数的语法,但不明白答案是如何计算的。例如,我不明白为什么下面的代码:

L = struct.pack('f', 255) print([ii for ii in L])

将产生以下输出(特别是为什么有127和67):

[0, 0, 127, 67]

此外,为什么以下代码:

LL = struct.unpack('i', b'0000') print(LL)

将产生以下数字:

(808464432,)

谢谢你的帮助。

在第一种情况下,您看到的是组成32位浮点数的4个字节的十进制值。

在您的特定示例中,浮点数字255.0在内存中表示为4个字节,十六进制值为43 7f 00 00。由于您使用的是小端序平台,因此您首先看到的是最低有效字节。因此,转换成一个字节列表,你就有了

[ 0x00, 0x00, 0x7f, 0x43 ]

转换为十进制值,即可获得

[0, 0, 127, 67]

在第二种情况下,您尝试解释b'0000'的结果。

>>> type(b'0000')
<class 'bytes'>
>>> len(b'0000')
4

如您所见,此表达式返回一个4字节的序列,因此在本例中,它将是一个由字符0的4个实例组成的序列。

>>> '%x' % ord('0')
'30'

字符0的值是十六进制的0x30。被解释为32位整数的4个字节相当于0x30303030的十六进制值。

>>> 0x30303030
808464432

当我们把这个值写成十进制时,我们得到808464432

最新更新