Como exibir os dados brutos do Buffer do nodejs como string hexadecimal

94

O código a seguir usa o módulo SerialPort para ouvir os dados de uma conexão bluetooth.

Estou esperando ver um fluxo de dados no formato hexadecimal impresso no console. Mas o console mostra apenas alguns símbolos estranhos. Quero saber como posso decodificar e exibir os dados no console.

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());
 });  
});
GingerJim
fonte
12
dados já são um buffer, não há necessidade de converter. Então: data.toString ('hex');
Laurent Perrin de

Respostas:

206

Este código mostrará o buffer de dados como uma string hexadecimal:

buff.toString('hex');
Seryh
fonte
4
você sabe fazer o inverso?
Bubakazouba
20
bubakazouba: novo Buffer (buf.toString ('hex'), 'hex');
Seryh
2
[DEP0005] DeprecationWarning: Buffer () está obsoleto devido a problemas de segurança e usabilidade. Use os métodos Buffer.alloc (), Buffer.allocUnsafe () ou Buffer.from (). Então agora deve serBuffer.from( buf.toString('hex'),'hex');
flob
Ele retorna para mim [object ArrayBuffer]? o que há de errado?
Mamdouh Saeed
-3

A melhor resposta é a maneira mais simples de fazer isso.

Um método alternativo:

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('');
Omar Taylor
fonte
Esta resposta foi realmente útil para mim, porque eu tenho que juntá-la com '-' para interoperar com C #. Votado.
Edza