gpt4 book ai didi

javascript - 使用 paho mqttws31.js 接收二进制文件

转载 作者:行者123 更新时间:2023-11-30 12:37:44 25 4
gpt4 key购买 nike

我正在使用 paho:http://www.eclipse.org/paho/clients/js/ lib 连接到 mqtt-broker。但是当我通过 websockets 接收二进制数据时,它说我的数据格式错误: 错误:AMQJS0009E 格式错误的 UTF 数据:d4 -3f。 .是否可以使用 paho mqttws31.js 接收二进制文件

编辑:不幸的是,我使用 (message.payloadString) 来获取收到的消息。但据我所知(https://github.com/i5ting/paho.mqtt.javascript/blob/master/src/mqttws31.js#L2060),也可以使用 message.payloadBytes。

所以实际上我发送的是 double ,每个有 8 个字节。我如何在 message.payloadBytes 中访问它们?

谢谢。

最佳答案

你可能想看看这个:

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 float

另一种可能的选择是查看上一个问题的答案:

Read/Write bytes of float in 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

这样效果更好,可以解码任意长度的 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/

关于javascript - 使用 paho mqttws31.js 接收二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25547653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com