Comment afficher les données brutes du tampon nodejs sous forme de chaîne hexadécimale

95

Le code suivant utilise le module SerialPort pour écouter les données d'une connexion Bluetooth.

Je m'attends à voir un flux de données au format hexadécimal imprimé dans la console. Mais la console montre juste quelques simboles étranges. Je veux savoir comment décoder et afficher les données dans la 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());
 });  
});
GingerJim
la source
12
les données sont déjà un tampon, pas besoin de convertir. Ensuite: data.toString ('hex');
Laurent Perrin

Réponses:

207

Ce code affichera le tampon de données sous forme de chaîne hexadécimale:

buff.toString('hex');
Seryh
la source
4
savez-vous comment faire l'inverse?
bubakazouba
20
bubakazouba: nouveau tampon (buf.toString ('hex'), 'hex');
Seryh
2
[DEP0005] DeprecationWarning: Buffer () est obsolète en raison de problèmes de sécurité et d'utilisabilité. Veuillez utiliser les méthodes Buffer.alloc (), Buffer.allocUnsafe () ou Buffer.from () à la place. Alors maintenant ça devrait êtreBuffer.from( buf.toString('hex'),'hex');
flob
Ça revient pour moi [object ArrayBuffer]? Qu'est-ce qui ne va pas?
Mamdouh Saeed
-2

La meilleure réponse est le moyen le plus simple de le faire.

Une méthode alternative:

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
la source
1
Cette réponse m'a en fait été utile, car je dois la joindre avec «-» pour qu'elle interagisse avec C #. J'ai voté pour.
Edza