使用javascript将0x附加到缓冲区字节中的十六进制数字

问题描述

我正在尝试使用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,0x58,0x7E,0x31,0x2E,0x20,0x30,0x32,0x2D,0x37,0x48,0x33,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,但就我而言,除非我的代码错误,否则似乎是这种情况。

任何寻求解决方案的帮助都将受到赞赏。

解决方法

在发布后10分钟内尝试了一天之后,我发现了。 我的parseInt缺少16个基数
new Buffer([parseInt(bufferNum.toString(16))])]

应该是

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

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