Как отобразить необработанные данные буфера nodejs в виде шестнадцатеричной строки

96

В следующем коде используется модуль 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 ('шестнадцатеричный');
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]? что не так?
Мамдух Саид,
-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 #. Проголосовали.
Эдза