前言
本文是讲诉 node - serialport串口通讯 发送使用add8加密Hex
一、代码
var encoding = 'hex';
var cmd="";//hex 字符串
//处理hex字符串
var pushData = this.handlerHex(cmd); //不使用ADD8加密
var pushData = this.handlerHex( this.RoofADD8(cmd));//使用ADD8加密
this.port.write(pushData, encoding, function (err, result) {
})
handlerHex(data) {
let _ts = this;
let dataStr = '';
if (data.trim().indexOf(' ') > -1) {
let hexArr = data.trim().split(' ');
for (let i in hexArr) {
if (hexArr[i].length == 1) {
dataStr += '0';
}
dataStr += hexArr[i];
}
} else {
dataStr = _ts.handlerHexDisplay(data.trim());
}
return dataStr.replace(/\s+/g, '');
},
handlerHexDisplay(data) {
let dataStr = '';
let isOdd = true;
if (data.length % 2 == 0) {
isOdd = false;
}
for (let i = 0, len = data.length; i < len; i++) {
// 自动补零
if (isOdd && len - i == 1) {
dataStr += '0';
}
// 字符拼接
dataStr += data.charAt(i);
// 每两个字符加一个空格
if (i % 2 > 0 || len - i == 1) {
dataStr += ' ';
}
}
return dataStr;
},
RoofADD8(cmd){
//校验位截取
var roofstr= cmd.compileCmd.substr(校验位开始, 校验位结束)
//字符串转成Bytes格式
var roofstr111=this.hexToBytes(roofstr)
//十进制相加
var sum = roofstr111.reduce(function(acc, cur) {
return acc + cur;
}, 0);
//Bytes最大只能存256,累加的值要减去
while(sum>256){
sum=sum-256
}
//十进制转hex
var hexString = sum.toString(16);
//插入校验位
var routerEnd= 校验位开始前的字符串
var routerStartt= 校验位结束后的字符串
return routerStartt+hexString+routerEnd
},