あなたはおそらくこれを見たいと思うでしょう:
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
これはうまく機能し、double の配列の任意の長さをデコードします。
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 /