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

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.