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

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

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

1
Esta respuesta fue realmente útil para mí, porque tengo que unirla con '-' para que interopere con C #. Voto a favor.
Edza
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.