将两个16位寄存器组合成一个32位浮点数

时间:2019-09-13 13:59:53

标签: python bit-manipulation

所以我有一个项目,正在从MODBUS寄存器中读取数据。

每个寄存器为16位,每个值为32位。因此,我必须一次读取两个寄存器才能读取每个值。

所以我现在要做的是读取两个寄存器并将它们存储在regs数组中,并按如下方式获取它们的位:

bits = (regs[0] << 16) + regs[1]

然后我尝试将这些位转换为如下所示的浮点数:

s = struct.pack('>l', bits)
final = struct.unpack('>f', s)[0]

final应该是我的32位浮点数。这几乎一直都有效,但是在某些情况下,我会收到此错误:

Read registers failed: 'l' format requires -2147483648 <= number <= 2147483647

因此,我回过头来添加了一条打印语句,以查看在将其转换为浮点数之前是什么样子,它就是3309382817,显然不在该范围之内...

那么我在做错什么导致我收到此错误?有什么我想念的吗?


更新:

只提供更多信息,在打印regs的值时再次运行它,并得到以下信息:

[50561, 10024]  # this is the value of regs
3313575720      # this is the value of bits

0 个答案:

没有答案