วิธีการแสดงข้อมูลบัฟเฟอร์ดิบ nodejs เป็นสตริง Hex


96

รหัสต่อไปนี้ใช้โมดูล SerialPort เพื่อฟังข้อมูลจากการเชื่อมต่อบลูทู ธ

ฉันคาดหวังว่าจะเห็นสตรีมข้อมูลในรูปแบบเลขฐานสิบหกที่พิมพ์ในคอนโซล แต่คอนโซลก็แสดงซิมโบลแปลก ๆ ฉันต้องการทราบว่าฉันจะถอดรหัสและแสดงข้อมูลในคอนโซลได้อย่างไร

var serialPort = new SerialPort("/dev/tty.EV3-SerialPort", {
  parser: SP.parsers.raw
}, false); // this is the openImmediately flag [default is true]

serialPort.open(function () {
 console.log('open');
 serialPort.on('data', function(data) {
   var buff = new Buffer(data, 'utf8'); //no sure about this
  console.log('data received: ' + buff.toString());
 });  
});

12
ข้อมูลเป็นบัฟเฟอร์อยู่แล้วไม่จำเป็นต้องแปลง จากนั้น: data.toString ('hex');
Laurent Perrin

คำตอบ:


209

รหัสนี้จะแสดงบัฟเฟอร์ข้อมูลเป็นสตริงเลขฐานสิบหก:

buff.toString('hex');

4
คุณรู้วิธีการย้อนกลับหรือไม่?
bubakazouba

20
bubakazouba: บัฟเฟอร์ใหม่ (buf.toString ('hex'), 'hex');
Seryh

2
[DEP0005] DeprecationWarning: Buffer () เลิกใช้งานเนื่องจากปัญหาด้านความปลอดภัยและการใช้งาน โปรดใช้วิธี Buffer.alloc (), Buffer.allocUnsafe () หรือ Buffer.from () แทน ตอนนี้มันควรจะเป็นBuffer.from( buf.toString('hex'),'hex');
flob

มันกลับมาหาฉัน[object ArrayBuffer]? เป็นอะไรไป?
Mamdouh Saeed

-2

คำตอบยอดนิยมคือวิธีที่ง่ายที่สุดที่จะทำ

วิธีอื่น:

data = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);

Array.prototype.map.call(new Uint8Array(data),
               x => ('00' + x.toString(16)).slice(-2))
        .join('').match(/[a-fA-F0-9]{2}/g).reverse().join('');

1
คำตอบนี้มีประโยชน์สำหรับฉันจริงๆเพราะฉันต้องเข้าร่วมกับ '-' เพื่อให้มันทำงานร่วมกับ C # โหวตแล้ว
Edza
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.