You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何将Float32编码的Buffer解析为数值数组或JSON对象

实现方案

完全可以实现,你收到的12字节Buffer刚好对应3个4字节长度的IEEE754单精度浮点数(Float32),按顺序每4字节切分后,和你给出的数值映射关系完全匹配,可以直接解析为目标数组或JSON对象。

解析为数值数组

以Node.js环境为例,直接通过Buffer内置的Float读取方法即可实现,注意匹配数据源的字节序:

// 初始化原始Buffer,先去掉十六进制字符串里的空格
const rawBuffer = Buffer.from('40 48 f5 c3 3f b4 7a e1 3f 35 c2 8f'.replaceAll(' ', ''), 'hex');
const floatArray = [];

// Float32单精度占4字节,按偏移量循环读取,此处为大端序读取(和给出的十六进制顺序匹配)
for (let offset = 0; offset < rawBuffer.length; offset += 4) {
  floatArray.push(rawBuffer.readFloatBE(offset));
}

// 直接输出会带浮点数固有精度误差:[3.140000104904175, 1.409999966621399, 0.7099999785423279]
// 按需保留小数位即可得到目标值
const targetArray = floatArray.map(num => Number(num.toFixed(2)));
console.log(targetArray); // [3.14, 1.41, 0.71]

映射为指定格式JSON对象

拿到解析后的数组后,按字段名映射即可:

const targetJson = {
  value1: targetArray[0],
  value2: targetArray[1],
  value3: targetArray[2]
};

console.log(targetJson);
// 输出:{ value1: 3.14, value2: 1.41, value3: 0.71 }

注意:如果读取出来的数值明显异常,说明字节序不匹配,将代码里的readFloatBE(大端序)替换为readFloatLE(小端序)重试即可。浮点数解析后的微小误差是IEEE754编码的固有特性,不属于解析错误。

内容的提问来源于stack exchange,提问作者MeerArtefakt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:27:09