Cómo mostrar datos de búfer sin procesar de nodejs como cadena hexadecimal

95

El siguiente código usa el módulo SerialPort para escuchar datos de una conexión bluetooth.

Espero ver un flujo de datos en formato hexadecimal impreso en la consola. Pero la consola solo muestra algunos símbolos extraños. Quiero saber cómo puedo decodificar y mostrar los datos en la consola.

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());
 });  
});
JengibreJim
fuente
12
los datos ya son un búfer, no es necesario convertirlos. Entonces: data.toString ('hex');
Laurent Perrin

Respuestas:

207

Este código mostrará el búfer de datos como una cadena hexadecimal:

buff.toString('hex');
Seryh
fuente
4
¿Sabes cómo hacer lo contrario?
Bubakazouba
20
bubakazouba: nuevo búfer (buf.toString ('hex'), 'hex');
Seryh
2
[DEP0005] DeprecationWarning: Buffer () está en desuso debido a problemas de seguridad y usabilidad. En su lugar, utilice los métodos Buffer.alloc (), Buffer.allocUnsafe () o Buffer.from (). Así que ahora debería serBuffer.from( buf.toString('hex'),'hex');
flob
¿Vuelve por mí [object ArrayBuffer]? que esta mal
Mamdouh Saeed
-2

La respuesta principal es la forma más sencilla de hacerlo.

Un 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
fuente
1
Esta respuesta fue realmente útil para mí, porque tengo que unirla con '-' para que interopere con C #. Voto a favor.
Edza