你可能想看看这个:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays
从这里看起来你应该能够做这样的事情:
var payload = message.payloadByte()
var doubleView = new Float64Array(payload);
var number = doubleView[0];
这假设消息的有效负载是单个 64 位 IEEE 浮点数
另一种可能的选择是查看上一个问题的答案:
在 JS 中读/写 float 字节
编辑:
以下代码适用于我:
function onMessageArrived(message) {
var payload = message.payloadBytes
var length = payload.length;
var buffer = new ArrayBuffer(length);
uint = new Uint8Array(buffer);
for (var i=0; i<length; i++) {
uint[(length-1)-i] = payload[i];
}
var doubleView = new Float64Array(uint.buffer);
var number = doubleView[0];
console.log("onMessageArrived:"+number);
};
请注意,我必须颠倒字节顺序才能获得正确的输出。
编辑 2
这效果更好,并将解码任意长度的双精度数组:
function onMessageArrived(message) {
var payload = message.payloadBytes
var length = payload.length;
var buffer = new ArrayBuffer(length);
uint = new Uint8Array(buffer);
for (var i=0; i<length; i++) {
uint[i] = payload[i];
}
var dataView = new DataView(uint.buffer);
for (var i=0; i<length/8; i++) {
console.log(dataView.getFloat64((i*8), false));
}
};
(您可能需要在 dataView.getFloat64() 的末尾将 false 翻转为 true,具体取决于发送平台的字节序)
可以在这里找到我编写的代码的完整记录:http ://www.hardill.me.uk/wordpress/2014/08/29/unpacking-binary-data-from-mqtt-in-javascript /