将python列表转换为float - python

我有从硬件读取并返回的库函数

value = readregister(registerindex,numbytes)

其中value是python列表。

如果numbytes为4,则将返回完整的返回数字

value[0],value[1],value[2] and value[3]   

寄存器中的实际值为浮点数。
那么,如何将4个元素的列表值转换为python浮点数?

python大神给出的解决方案

您首先需要将四个字节的列表转换为Python字节字符串,然后将字符串转换为浮点值。

假设您有列表value = [0, 0, 192, 63]。首先转换为字节字符串:

vstr = ''.join([chr(k) for k in slist]) #chr converts the integer into the corresponding byte

然后,作为dyoo points out,您可以使用struct.unpack将字节字符串转换为浮点数:

f = struct.unpack("f", vstr)

在此示例中,f为1.5。

您需要了解的一件事是硬件设备的字节序。如果从平台颠倒了字节序,则在进行解压缩时,将“ f”用作struct.unpack的格式字符串将给出错误的答案。对于小端设备,在格式字符串前添加<;对于大端设备,在格式字符串前添加>:

fle = struct.unpack("<f", ''.join([chr(k) for k in value]) #for little-endian HW
fbe = struct.unpack(">f", ''.join([chr(k) for k in value]) #for big-endian HW