补充:2023.5.28
哥们反馈了问题,可能是mqtt.min.js文件问题,现在已经重新上传最新的哈,是保证这边百分百能用啦~~~~
还有16进制字符串转16进制的程序段,希望能帮到你们
//字符串转ArrayBuffer已经是十六进制,直接转buffer
function string2buffer(str) {
// 将16进制转化为ArrayBuffer
return new Uint8Array(str.match(/[\da-f]{2}/gi).map(function (h) {
return parseInt(h, 16)
})).buffer
}
=====我是分割线======
补充:2023.5.27
鉴于有兄弟说没效果,以及自我怀疑精神,我又重新把之前程序拿出来看并跑一遍还是可以哈…
奉上最新效果:
下边是调试工具接收的数据,收到4个字节的HEX,上边是小程序发送的HEX数据,右边是小程序接收的字符串形式数据,一般会乱码哈。使用的mqtt是上传的那个文件,所以在我这台还边还是能正常使用!
=====================分割线=======================
这个问题查找了好久,困扰了好几天!
最近在做通讯项目,根据网上收罗的字符串str转hex的Uint8Array方法,能正常转换,一旦要publish发布就导致mqtt断线重连,一直以为是转换发送问题,查了好久都没头绪,因为VUE正常发送HEX的16进制数据,所以一直都没怀疑常用 mqtt.min.js文件!
最后不得已才把矛头指向 mqtt.min.js 文件,通过一步步走下来才发现在发送 payload 数据时,直接以字符串方式发送,修改成 buff 方式就行!因此在 mqtt.min.js 的publish加了一个判断来判别数据类型!
不想自己更改的可以使用我上传的js文件替换试试看:mqtt.min.js文件