我正在尝试通过 TCP modbus 解码来自 Shark 100 功率计的一些数据。我已经成功地拉下了我需要的寄存器,并从寄存器中留下了两个原始值,如下所示:
[17138, 59381]
从手册中,我知道我需要将这两个数字转换为32位IEEE浮点数。我还从手册中知道“低地址寄存器是
高阶一半(即包含指数)。”上面显示的列表中的第一个数字是低地址寄存器。
使用 Python(如果需要,任何库都可以),我如何获取这两个值并将它们转换为 32 位 IEEE 浮点值。
我尝试使用各种在线转换器和计算器来找出一种非编程方式来执行此操作,但是,我尝试过的任何操作都会得到超出范围的结果(在这种情况下我正在读取伏特,因此最终结果从上面提供的值来看应该在 120-122 左右)。
Python 3.6+ 的更新(f 字符串)。
我不知道为什么填写@B.Go的答案只是2
。另外,由于字节顺序是大端字节顺序,因此我对其进行了硬编码。
import struct
a = 17138
b = 59381
struct.unpack('>f', bytes.fromhex(f"{a:0>4x}" + f"{b:0>4x}"))[0]
Output: 121.45304107666016
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)