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());
 });  
});

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');

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('');

Esta resposta foi realmente útil para mim, porque eu tenho que juntá-la com '-' para interoperar com C #. Votado.
Edza
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.