Вы, вероятно, хотите взглянуть на это:
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
РЕДАКТИРОВАТЬ:
У меня работает следующий код:
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));
}
};
(вам может потребоваться перевернуть false на true в конце dataView.getFloat64() в зависимости от порядка байтов отправляющей платформы)
Полный текст кода, который я написал для этого, можно найти здесь: http://www.hardill.me.uk/wordpress/2014/08/29/unpacking-binary-data-from-mqtt-in-javascript/ а>
person
hardillb
schedule
29.08.2014