4
这里是我的节点js代码错误:无效的十六进制字符串
if (protocol == '01') {
console.log('...goint to get Ack Obj...');
var o = getAckObj(hexString);
console.log('...ack obj received...');
var msg = ackMsg(o);
console.log('..going to write buffer...');
socket.write(new Buffer(msg, 'hex')); //, 'binary');
console.log('Server sent welcome: ' + msg);
}
.....
function ackMsg(dataObj) {
var ackText = '';
dataObj.len = '05'; //for ack msg its always 05
var e = crc16(dataObj.len + dataObj.protocol + dataObj.serial, 'hex');
dataObj.error = e.toString(16);
return dataObj.start + dataObj.len + dataObj.protocol + dataObj.serial + dataObj.error + dataObj.stop;
}
这里是十六进制串值78780d010387113120864842000ccbe40d0a
在控制台上进行投入
...goint to get Ack Obj...
...ack obj received...
..going to write buffer...
buffer.js:348
ret = this.parent.hexWrite(string, this.offset + offset, length);
'new Buffer()'将第二个参数作为消息的编码。通过编码它是指字符编码(默认为'utf8'),而不是数字编码。 –
@ThalisK。 'hex'是使用'Buffer'的有效编码('base64'是另一个)。 @ coure2011考虑到'dataObj.len'是'05',并且您显示的值不包含该值,您确定msg是正确的吗? – robertklep
是的,这是正确的...这个len没有显示整个消息的长度,但它的目的是不同的。 – coure2011