问题描述
如果这里已经回答了这个问题,我深表歉意。我的搜索发现了类似的问题,但未能将它们应用于我的情况。
我通过串行通信以两个 16 位十六进制字节的形式接收数据。现在由两个python整数表示。 [48822,15938]
这些字节代表一个带符号的浮点变量。即 [48822,15938]
-->[0xbeb6,0x3e42]
-->[0x3e42beb6]
-->[0.190181]
如何在python3.4中完成这个转换?
解决方法
>>> import struct
>>> f = struct.unpack('f',struct.pack('HH',48822,15938))[0]
>>> f
0.19018062949180603
>>>
您可以使用 *lst
将列表转换为 struct.pack
的参数。
如果您通过这种方式获取大量数据,您可能需要考虑使用 numpy。可以打包一个 dtype np.uint16
的缓冲区,直接查看内容为 np.float32
,无需复制任何数据:
n = 1
buffer = np.zeros(2 * n,dtype=np.uint16)
floats = buffer.view(np.float32)
buffer[:2] = [48822,15938]
print(floats)