问题描述
我正在尝试使用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)])]
希望此代码或其他一些代码对某人有用。