node.js - 使用缓冲区 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。
解决方案
问题是您如何定义缓冲区。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;
推荐阅读
- css - 用于包裹物品并具有动态宽度的固定高度容器的 Flexbox
- c - 读取每行内容不同的txt文件
- matlab - 不能将函数作为参数传递 Matlab
- reactjs - 为什么脚本评估需要这么长时间?
- c - C: printf("%s\n", str) 产生乱码?
- opencl - OpenCL:我可以同时进行“读取”操作吗?
- javascript - multipart/form-data 中的 blob 作为 [object Blob] 使用 XMLHttpRequest 发送
- regex - 如何使用数组公式计算范围内的值
- machine-learning - 什么是 K Max 池化?如何在 Keras 中实现它?
- javascript - javascript星座计算器说“未定义”