首页 > 解决方案 > 使用缓冲区 nodejs 构建浮点值

问题描述

我正在阅读 2x16 位形式的 32Bit 浮点数。构建我正在尝试使用 Nodejs Buffer函数的值,如下所示:

// Create new Buffer based on array bytes
var buf = Buffer.from([0x122f, 0x3A53]);

// Represent these bytes as 32-bit unsigned int
const value = buf.readUInt32BE();

// save the value
msg.payload = value;

return msg;

我在 Node-red 上运行它,我收到以下错误:

RangeError [ERR_BUFFER_OUT_OF_BOUNDS]: Attempt to write outside buffer bounds

知道我在这里做错了什么吗?提前致谢 !

更新 @hardillb回答后,错误已解决,但是,我仍然可以获得浮点值吗?这是我得到的:

在此处输入图像描述

所以问题是如何构建浮动出那些 2 uint16。

标签: node.jsnode-red

解决方案


问题是您如何定义缓冲区。Buffer.from()期待一个字节数组,而不是 2 个 16 位数字

您可以通过将 16 位数字写入新缓冲区来做到这一点,例如

var buf = Buffer.alloc(4);
buf.writeUInt16BE(0x122f);
buf.writeUInt16BE(0x3a53);

msg.payload = buf.readUInt32BE();
return msg;

从已经存在的 16 位值数组构建它msg.payload

var buf = Buffer.alloc(msg.payload.length * 2)
for (var i=0; i< msg.payload.length); i++) {
  buf.writeUInt16BE(msg.payload[i], (i*2));
}

msg.payload = buf.readUInt32BE();
return msg;

推荐阅读