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