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

时间:2016-02-21 00:54:08

标签: javascript

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

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 .. 我做错了什么?

1 个答案:

答案 0 :(得分:1)

这不是解析问题,也不需要执行任何十六进制转换。十六进制(如十进制)只是一个表示。您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