Come visualizzare i dati del buffer non elaborati di nodejs come stringa esadecimale


95

Il codice seguente usa il modulo SerialPort per ascoltare i dati da una connessione Bluetooth.

Mi aspetto di vedere un flusso di dati in formato esadecimale stampato nella console. Ma la console mostra solo alcuni strani simboli. Voglio sapere come posso decodificare e visualizzare i dati nella 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
i dati sono già un buffer, non è necessario convertirli. Quindi: data.toString ('hex');
Laurent Perrin

Risposte:


207

Questo codice mostrerà il buffer dei dati come una stringa esadecimale:

buff.toString('hex');

4
sai come fare il contrario?
bubakazouba

20
bubakazouba: nuovo Buffer (buf.toString ('hex'), 'hex');
Seryh

2
[DEP0005] DeprecationWarning: Buffer () è obsoleto a causa di problemi di sicurezza e usabilità. Utilizzare invece i metodi Buffer.alloc (), Buffer.allocUnsafe () o Buffer.from (). Quindi ora dovrebbe essereBuffer.from( buf.toString('hex'),'hex');
flob

Torna per me [object ArrayBuffer]? Cosa c'è che non va?
Mamdouh Saeed,

-2

La risposta migliore è il modo più semplice per farlo.

Un metodo 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
Questa risposta è stata effettivamente utile per me, perché devo unirla con "-" affinché possa interagire con C #. Votato.
Edza
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.