Jak wyświetlić nieprzetworzone dane bufora nodejs jako ciąg szesnastkowy

96

Poniższy kod wykorzystuje moduł SerialPort do nasłuchiwania danych z połączenia Bluetooth.

Oczekuję, że w konsoli zostanie wyświetlony strumień danych w formacie szesnastkowym. Ale konsola pokazuje tylko dziwne symbole. Chcę wiedzieć, jak zdekodować i wyświetlić dane w konsoli.

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
źródło
12
dane są już buforem, nie trzeba ich konwertować. Następnie: data.toString ('hex');
Laurent Perrin

Odpowiedzi:

209

Ten kod pokaże bufor danych jako ciąg szesnastkowy:

buff.toString('hex');
Seryh
źródło
4
czy wiesz, jak to zrobić odwrotnie?
bubakazouba
20
bubakazouba: nowy bufor (buf.toString ('hex'), 'hex');
Seryh
2
[DEP0005] DeprecationWarning: Buffer () jest przestarzały ze względu na problemy z bezpieczeństwem i użytecznością. Zamiast tego użyj metod Buffer.alloc (), Buffer.allocUnsafe () lub Buffer.from (). Więc teraz powinno byćBuffer.from( buf.toString('hex'),'hex');
flob
Wróci do mnie [object ArrayBuffer]? Co jest nie tak?
Mamdouh Saeed
-2

Najlepsza odpowiedź to najprostszy sposób.

Alternatywna metoda:

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
źródło
1
Ta odpowiedź była dla mnie przydatna, ponieważ muszę ją połączyć z „-”, aby mogła współdziałać z C #. Głosowano za.
Edza