Як відобразити необроблені дані буфера nodejs як шістнадцятковий рядок


95

Наступний код використовує модуль SerialPort для прослуховування даних із з'єднання Bluetooth.

Я очікую побачити потік даних у шістнадцятковому форматі, надрукований у консолі. Але консоль просто показує деякі дивні символи. Я хочу знати, як я можу декодувати та відобразити дані в консолі.

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

Відповіді:


207

Цей код відображатиме буфер даних як шістнадцятковий рядок:

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]? що не так?
Мамду Саїд

-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 #. Проголосував.
Едза
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.