收藏
回答

微信小程序调用mqtt通信,请问怎么发布buffer消息?

微信小程序调用mqtt.js与服务器通信,发布的消息类型为string和buffer,请问怎么发布buffer消息,

我使用

var buffers = new Uint8Array(message.match(/[\da-f]{2}/gi).map(function (h) {

return parseInt(h, 16)

})).buffer;

发布主题消息,但是服务器接收不到该主题消息。请问怎么解决?

回答关注问题邀请回答
收藏

4 个回答

  • 小程序/小游戏开发-Link
    小程序/小游戏开发-Link
    2019-11-11

    请确认下最终调用到微信接口的时候传的数据类型是什么

    2019-11-11
    有用
    回复 13
    • 风清雾散云开见日出
      风清雾散云开见日出
      2019-11-12
      通过ArrayBuffer.isView(buffer)判断为true
      2019-11-12
      回复
    • 风清雾散云开见日出
      风清雾散云开见日出
      2019-11-12
      正常发送string类型的数据可以通过mqtt通信,但是我转换为ArrayBuffer类型的数据打印在控制台为空,发送到mqtt时,mqtt接收不到,我把arraybuffer反转换为Uint8Array时,又有数据
      2019-11-12
      回复
    • 小程序/小游戏开发-Link
      小程序/小游戏开发-Link
      2019-11-12回复风清雾散云开见日出
      在开发者工具的 network 面板可以看到 WebSocket 的每一帧数据,你看一下内容是否正常。
      2019-11-12
      回复
    • 风清雾散云开见日出
      风清雾散云开见日出
      2019-11-12
      在network面板没有看到数据,我清空缓存,只点击client.publish('topic', 'message')方法发送消息,没有看到数据
      2019-11-12
      回复
    • 风清雾散云开见日出
      风清雾散云开见日出
      2019-11-12
      我发送的数据是这种,mqtt服务器没有这条消息的记录
      2019-11-12
      回复
    查看更多(8)
  • 👾
    👾
    2022-01-11

    我已经拿到了需要给MQTT发送的十六进制命令,怎么通过小程序发过去呢,现在发的是字符串

    2022-01-11
    有用
    回复
  • 幻听
    幻听
    2020-12-05

    发送带"¬"字符数据,接收到的数据会与之前发送的数据不一致,例如:发送:¬BBB¬BBB 字符串,对应的 Buffer: [172, 66, 66, 66, 172, 66, 66, 66]  

    收到: Â¬BBB¬BBB 字符串, 对应的 Buffer: [194, 172, 66, 66, 66, 194, 172, 66, 66, 66]

    接收到的数据总会在字符前加上Â字符,楼主有遇到这样的问题不?


    2020-12-05
    有用
    回复 1
    • 风清雾散云开见日出
      风清雾散云开见日出
      2020-12-21
      没有使用过特殊字符,一般不是A-F字符和数字吗
      2020-12-21
      回复
  • 余龙
    余龙
    2020-08-24

    请问一下楼主最后解决了吗

    2020-08-24
    有用
    回复 5
    • 风清雾散云开见日出
      风清雾散云开见日出
      2020-09-01
      转为16进制字符串就可以啦
      2020-09-01
      回复
    • 李琴
      李琴
      2020-09-27回复风清雾散云开见日出
      楼主,你好。
      我使用 的是:

      return new Uint8Array((val.match(/[\da-f]{2}/gi) || []).map(function (h) {  
          return new Uint8Array((valTemp).map(function (h) {
            return parseInt(h, 16)
          })).buffer;


      这里我和你写的差不多,我发现这样写只能发送数字,发送字母或者符号就收不到,因为匹配过后成为空的数组。
      我是小程序与BLE通信,只能发buffer。然后我尝试其他办法,把输入的字符串转为buffer发出去,都不成功。
      想请教下楼主,怎么才能把string转为buffer,万谢!
      2020-09-27
      回复
    • 风清雾散云开见日出
      风清雾散云开见日出
      2020-09-28回复李琴
      //字符串转ArrayBuffer已经是十六进制,直接转buffer
      function string2buffer(str) {
        // 将16进制转化为ArrayBuffer
        return new Uint8Array(str.match(/[\da-f]{2}/gi).map(function (h) {
          return parseInt(h, 16)
        })).buffer
      }
      2020-09-28
      回复
    • 风清雾散云开见日出
      风清雾散云开见日出
      2020-09-28回复李琴
      读取的值是buffer,需要转为string,这样就可以看到发送的和接受的一样
      2020-09-28
      回复
    • li
      li
      2022-06-03
      那跟你最早写的不是一样了吗怎么又可以了
      2022-06-03
      回复
登录 后发表内容
问题标签