在 JavaScript 中将两个 16 位数字组合并转换为一个 32 位数字(浮点数)

Combine and convert two 16 bit numbers into one 32 bit number (float) in JavaScript

我需要构建一个基于 NodeJS 服务器的原型来读取工业 modbus 数据。

我正在读取两个连续的 16 位十进制寄存器,它们为我提供了一个包含两个条目的数组:
// eg transaction = [ 17007, -2621 ]// eg transaction = [ 17007, 0000 ]

这个值应该转化为电频率,大约 = ~60.00 (hz)(如果我给出的数据是正确的,至少应该是这样)

我知道我需要组合数组中的两个寄存器值并将数据转换为 32 位浮点数..但是如何:

a) 如何组合它们而不将它们转换为它们不是的东西
b) 如何将它们转换为 32 位浮点数

我想我需要使用某种类型的 parseInt() 然后 toString(10) - 一个建议是使用 parseInt(num, 10).toString(16) 将每个转换为十六进制然后将连接的十六进制转换为字符串或者可能使用 parseFloat() 浮动,但如何首先连接两个单独的部分。

令人惊讶的是,我还没有找到解决方案。

您可以使用 DataView of an ArrayBuffer 使用定义的类型和字节顺序直接操作二进制数据。通过将寄存器值写入连续的 16 位整数并将结果解释为大端 (false) 32 位浮点数,我们得到您正在寻找的结果:

var buffer = new ArrayBuffer(4);
var view = new DataView(buffer);

view.setInt16(0, 17007, false);
view.setInt16(2, -2621, false);

document.body.textContent = view.getFloat32(0, false);