所以,长话短说,我试图自己“解压缩”一些数据,但我无法这样做。幸运的是我有解决方案,但我无法弄清楚方法。基本上,我在这里有这个数据数组,
[16 130 164 65 103 136 209 64 19 36 185 190 83]
,我被告知当通过'fffB'
'解包'时,我得到:
[20.56350708,6.54790068,-0.36160335,83]
我知道这个解决方案是正确的,但我不确定我们是如何实现的。
这里的上下文是输入数组'解包',使用Python的命令如下:
struct.unpack_from('fffB', input)
不过尽量尝试,我无法理解这里的确切操作。
答案 0 :(得分:1)
首先,您需要将数字列表转换为字符串,因为这是unpack
所期望的:
根据格式字符串fmt从缓冲区缓冲区(可能由pack(fmt,...)打包)解压缩。结果是一个元组,即使它只包含一个项目。缓冲区的大小(以字节为单位)必须与格式所需的大小相匹配,如calcsize()所示。
列表中的数字可以转换为chr
的字符,一旦join
将它们组合在一起,您就可以输入unpack
:
import struct
d = [16, 130, 164, 65, 103, 136, 209, 64, 19, 36, 185, 190, 83]
s = ''.join(chr(x) for x in d) # s = bytearray(d) on Python 3
struct.unpack('fffB', s) # (20.563507080078125, 6.547900676727295, -0.36160334944725037, 83)
格式字符串fffB
告诉unpack
提取三个4字节的浮点数和一个1字节的无符号字符大小。总共提取了13个字节,与您的数据长度相匹配。格式字符的确切规范可以从Python documentation找到。
请注意,上面的示例仅适用于Python 2.x,在Python 3.x上,您需要将列表转换为bytearray
而不是字符串。