use*_*168 3 python floating-point
我有从硬件读取并返回的库函数
value = readregister(registerindex,numbytes)
Run Code Online (Sandbox Code Playgroud)
其中value
是 python 列表。
如果numbytes
是4,则返回完整的返回数
value[0],value[1],value[2] and value[3]
Run Code Online (Sandbox Code Playgroud)
寄存器中的实际值是浮点数。那么如何将这个 4 个元素的列表值转换为 python 浮点数呢?
您需要首先将四个字节的列表转换为 Python 字节字符串,然后将该字符串转换为浮点值。
假设你有清单value = [0, 0, 192, 63]
。首先转换为字节串:
vstr = ''.join([chr(k) for k in slist]) #chr converts the integer into the corresponding byte
Run Code Online (Sandbox Code Playgroud)
然后,正如dyoo 指出的,您可以使用struct.unpack将字节字符串转换为浮点数:
f = struct.unpack("f", vstr)
Run Code Online (Sandbox Code Playgroud)
在本例中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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2093 次 |
最近记录: |