【问题标题】:append 0x to hex number in buffer byte with javascript使用javascript将0x附加到缓冲区字节中的十六进制数
【发布时间】:2021-02-03 20:50:13
【问题描述】:

我正在尝试使用 node.js/electron 和 RS232C 与旧机器通信。基本通信正常,但机器只接受以 0x 开头的字节。

var buffer = new Buffer([0x59]);
port.write(buffer);

将起作用并且命令将执行,但是:

var buffer = new Buffer([59]);
port.write(buffer);

将冻结机器。

我的问题是我正在尝试动态创建字节并且机器一直冻结。使用端口分析器,我可以看到正在发送 59,不幸的是,分析器显示 0x59 和 59 均为 59。

我的代码是:

var bufferHead = new Buffer([0x06,0x02]);
var bufferHead2 = new Buffer([0x30,0x41,0x46,0x4C]);      
var bufferData = new Buffer([0x4E,0x45,0x57,0x54,0x45,0x58,0x7E,0x31,0x2E,0x54,0x58,0x54,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x32,0x30,0x2D,0x31,0x30,0x2D,0x32,0x30,0x20,0x20,0x20,0x37,0x48,0x33,0x30,0x4D,0x0D]);
var bufferFoot = new Buffer([0x03]);      

var bufferNum=0;
var preBuffer = Buffer.concat([bufferHead2, bufferData, bufferFoot]);
for (let x of preBuffer) {
  bufferNum = bufferNum ^ x;
}

var finalBuffer = Buffer.concat([bufferHead, preBuffer, new Buffer([parseInt(bufferNum.toString(16))])]);
port.write(finalBuffer);

现在几乎所有的字节都是硬编码的,但最后一切都需要是动态的。 如何附加 0x 以创建与硬编码相同的字节? 有很多帖子说不需要 0x,但在我的情况下似乎是这样,除非我的代码有错误。

感谢您寻求解决方案的任何帮助。

【问题讨论】:

    标签: javascript node.js serial-port hex


    【解决方案1】:

    在发布后 10 分钟内尝试了一天后,我想通了。 我的 parseInt 缺少 16 个基数

    new Buffer([parseInt(bufferNum.toString(16))])]
    

    应该是

    new Buffer([parseInt(bufferNum.toString(16),16)])]
    

    希望这个或其他一些代码对某人有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 2017-09-13
      相关资源
      最近更新 更多