【问题标题】:Hex to ascii wrong conversion十六进制到ASCII错误的转换
【发布时间】:2016-04-22 15:32:52
【问题描述】:

我有一个 javascript 函数可以将 HEX 转换为 ASCII,然后将其输出到串行连接。 但是在监控串口连接时,我可以看到转换后的输出不正确。

我有这个 javascript 代码:

function hex2a(hexx) {
var hex = hexx.toString();//force conversion
var str = '';
for (var i = 0; i < hex.length; i += 2)
    str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
return {payload: hex2a(msg.payload)}; // returns '2460'

例如,我想转换这个 HEX :

0340209c

但是,在监控串行连接时,我发现实际发送的是这样的:

03 40 20 c2 9c  

因此设备以故障消息进行响应。 我在这里挠头。一些十六进制命令确实可以正确转换(例如 0340615b )。 我通过 node-red 输出到串行连接。 输出节点似乎只接受 ascii 文本而不接受 HEX。

我希望有人能指引我正确的方向。 感谢您的回复!

【问题讨论】:

  • 你到底传递给你的函数什么?结果是什么?想要的结果是什么?
  • 对不起,我传递了我给出的字符串作为示例:0340209c 我只想看到它转换为 ascii,当我监控串行连接时它应该输出“03 40 20 9c”但是现在它输出:“03 40 20 c2 9c”。
  • 换句话说,您只想将该字符串拆分为两个字符块?

标签: javascript hex ascii node-red


【解决方案1】:

试试这个:

function toAscii(hex, delimiter) {
  var outputstr = '';
  inputstr = inputstr.replace(/^(0x)?/g, '');
  inputstr = inputstr.replace(/[^A-Fa-f0-9]/g, '');
  inputstr = inputstr.split('');
  for(var i=0; i<inputstr.length; i+=2) outputstr += String.fromCharCode(parseInt(inputstr[i]+''+inputstr[i+1], 16));
  return outputstr;
} 

【讨论】:

    【解决方案2】:

    在 Node.js 中将十六进制转换为 ascii(在 v5+ 中测试)

    const hex = '...';
    const ascii = new Buffer(hex, 'hex');
    

    https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings

    【讨论】:

      【解决方案3】:

      谢谢! @Metabolix 为我指明了正确的方向!! 我通过使用以下代码将我的 HEX 字符串转换为缓冲区解决了我的问题。

      return {payload: new Buffer(msg.payload, "hex")};
      

      msg.payload 是一个注入的字符串,例如:

      0340209c
      

      在监视串行连接时,它现在读取了正确的命令!

      【讨论】:

        【解决方案4】:

        这是因为 JavaScript 和 Node-RED 对文本使用 UTF-8 编码,其中 Unicode 字符号 U+009c 编码为 c2 9c。 (请注意,ASCII实际上是一个从0x00到0x7f的7位字符集,而从0x80到0xff的8位代码取决于字符集或编码。)

        Node-RED 还具有二进制支持(请参阅this GitHub issue)。文档相当模糊,但看起来您应该使用 Node.js Buffer 对象作为有效负载。

        【讨论】:

          猜你喜欢
          • 2014-06-22
          • 1970-01-01
          • 2015-05-22
          • 1970-01-01
          • 1970-01-01
          • 2018-05-26
          • 1970-01-01
          • 2011-11-27
          • 2012-11-14
          相关资源
          最近更新 更多