我可以将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 .. 我做错了什么?
答案 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