如何在 Javascript 中将 4 个字节组合成浮点值



我可以向我的javascript发送4个字节的数据,

var data = new Uint8Array(data);
console.log('Data received: [ (data[0]) +', ' + (data[1]) +', ' + (data[2]) + ', ' + (data[3]) +  ']');
console.log('Data received: [ d2h(data[0]) +', ' + d2h(data[1]) +', ' + d2h(data[2]) + ', ' + d2h(data[3]) +  ']');
var hexvalue = ((d2h(data[4]) << 24) | (d2h(data[3]) << 16) | (d2h(data[2]) << 8) | d2h(data[1]));
value = parseFloat(hexvalue);
console.log(value);

在我的日志中,我看到这个

LOG: Data received: [77, 249, 144, 66]
LOG: Data received: [4d, f9, 90, 42]
LOG: 710541312

我预计会得到 72.49..我做错了什么?

这不是解析问题,也无需执行任何十六进制转换。十六进制(如十进制)只是一个表示Uint8Array中的值已经是数字。

要强制将这些字节解释为 32 位浮点值,您只需使用相同的缓冲区作为Float32Array实例的基础:

var data = new Uint8Array(data);
var f32 = new Float32Array(data.buffer);
var f32value = f32[0];

编辑 — 更明确地:

var data = new Uint8Array(4);
data[0] = 0x4d;
data[1] = 0xf9;
data[2] = 0x90;
data[3] = 0x42;
var f32 = new Float32Array(data.buffer);
var f32value = f32[0];
console.log(f32value); // 72.4869155883789

最新更新