Python3.4 将 int16_t 字符串转换为有符号浮点数

问题描述

如果这里已经回答了这个问题,我深表歉意。我的搜索发现了类似的问题,但未能将它们应用于我的情况。

我通过串行通信以两个 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)