收藏
回答

如何将字符串转换成16进带“0x”开头?

最近学习蓝牙模块,将字符串转换成16进制形式发到蓝牙模块,但转换出来开头缺少符号“0x”,如字符串"1234",转成 ["31", "32", "33", "34"],但蓝牙模块无法识别,只能识别[0x31, 0x32, 0x33, 0x34]这个形式,网上下载代码

stringToBytes:function(str){

var array = [];

array.push("0x");

for (var i = 0; i < str.length; i++) {

array.push((str.charCodeAt(i)).toString(16));

}

array.join("");

console.log(array);

let buffer = new Uint16Array (array).buffer;

return array;

},

但结果["31", "32", "33", "34"]一样是无,求大神救助。


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

2 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-02-18

    [0x31, 0x32, 0x33, 0x34] 就是 [49, 50, 51, 52]吧

    function stringToBytes(str){
    
      var array = [];
      
      for (var i = 0; i < str.length; i++) {
      
        array.push(parseInt((str.charCodeAt(i)).toString(16), 16));
      
      }
      
      array.join("");
      
      console.log(array);
      
      let buffer = new Uint16Array (array).buffer;
      
      return array;
      
    }
    

    --↓↓👍点赞是回答的动力哦

    2020-02-18
    有用
    回复 6
    • 光
      2020-02-18
      转换成ASCII码后好像是 [49, 50, 51, 52],但蓝牙模块一样无显示?图二是蓝牙模块代码
      stringToBytes:function(str){
          var array = [];
          for (var i = 0; i < str.length; i++) {
            array.push(parseInt((str.charCodeAt(i)).toString(16), 16));
          }
          console.log(array);
          let buffer = new Uint8Array (array).buffer;
          return array;
        },
      startwrite: function () {   
          let that=this;
          let array = [0x31, 0x32, 0x33, 0x34]; //输入这个array蓝牙模块能够识别为1234
          let buffer=new Uint8Array(array).buffer;
          wx.writeBLECharacteristicValue({
            deviceId: that.data.current_device,
            serviceId: that.data.current_service,
            characteristicId: that.data.current_characteristic,
            value: that.stringToBytes("1234"), //输入这个无任何显示,换成array就可以
            success: function (res) {
              console.log("writeBLECharacteristicValue success", res.errMsg)
            }
          })
        },
      2020-02-18
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2020-02-19回复
      writeBLECharacteristicValue加个fail看看报什么错
      2020-02-19
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2020-02-19回复
      应该是return buffer吧
      2020-02-19
      回复
    • 光
      2020-02-19回复o0o有脾气的酸奶
      十分感谢,问题终于解决,但换成中文会变乱码?请高手再指教一下。将“1234”换成"一二三四",就如图二打印出来,有办法解决?
      2020-02-19
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2020-02-19回复
      中文编码的问题,先转gbk再转16进制
      https://www.jianshu.com/p/20419462e381
      文末有git

      --↓↓👍点赞是回答的动力哦

      2020-02-19
      回复
    查看更多(1)
  • ᥬ[吃瓜]᭄
    ᥬ[吃瓜]᭄
    2020-02-18
    var str = "1234";
    var val = [];
    for (var i = 0; i < str.length; i++) {
        val.push("0x" + str.charCodeAt(i).toString(16))
    }
    console.log(val)
    
    2020-02-18
    有用
    回复 2
    • 光
      2020-02-18
      这样会变成字符串形式,蓝牙模块不能识别
      2020-02-18
      回复
    • 罗丹
      罗丹
      2021-04-22回复
      请问楼主转成 [0x31] 这样格式实现了吗?实现了的话可否分享一下方法
      2021-04-22
      回复
登录 后发表内容
问题标签