在Python

时间:2016-05-14 21:26:10

标签: python python-3.x

我是Python的新手(我正在使用Python3)和一般的编程。能否详细解释一下pack和unpack如何在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,)

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

在第一种情况下,您会看到构成32bit floating point number的4个字节的十进制值。

在您的特定示例中,浮点数255.0在内存中表示为4字节,十六进制值为43 7f 00 00。由于您位于little-endian平台上,因此您首先会看到最不重要的字节。因此,转换为字节列表,你有

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

转换为您获得的十进制值

[0, 0, 127, 67]

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

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

如您所见,此表达式返回4个字节的序列,因此在这种情况下,它将是4个字符0实例的序列。

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

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

>>> 0x30303030
808464432

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