So zeigen Sie die Rohdaten des Knotens als Hex-Zeichenfolge an

94

Der folgende Code verwendet das SerialPort-Modul, um Daten von einer Bluetooth-Verbindung abzuhören.

Ich erwarte einen Datenstrom im Hexadezimalformat, der in der Konsole gedruckt wird. Aber die Konsole zeigt nur einige seltsame Symbole. Ich möchte wissen, wie ich die Daten in der Konsole dekodieren und anzeigen kann.

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
quelle
12
Daten sind bereits ein Puffer, keine Konvertierung erforderlich. Dann: data.toString ('hex');
Laurent Perrin

Antworten:

206

Dieser Code zeigt den Datenpuffer als Hex-Zeichenfolge an:

buff.toString('hex');
Seryh
quelle
4
Weißt du, wie man das Gegenteil macht?
Bubakazouba
20
bubakazouba: neuer Puffer (buf.toString ('hex'), 'hex');
Seryh
2
[DEP0005] DeprecationWarning: Buffer () ist aufgrund von Sicherheits- und Usability-Problemen veraltet. Verwenden Sie stattdessen die Methoden Buffer.alloc (), Buffer.allocUnsafe () oder Buffer.from (). Also jetzt sollte es seinBuffer.from( buf.toString('hex'),'hex');
Flob
-3

Die beste Antwort ist der einfachste Weg, dies zu tun.

Eine alternative Methode:

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
quelle
Diese Antwort war tatsächlich nützlich für mich, da ich sie mit '-' verbinden muss, damit sie mit C # interopiert. Upvoted.
Edza