Bagaimana menampilkan data Buffer mentah nodejs sebagai string Hex

96

Kode berikut menggunakan modul SerialPort untuk mendengarkan data dari koneksi bluetooth.

Saya mengharapkan untuk melihat aliran data dalam format Heksadesimal dicetak di konsol. Tapi konsol itu hanya menampilkan beberapa simbol aneh. Saya ingin tahu bagaimana cara memecahkan kode dan menampilkan data di konsol.

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
sumber
12
data sudah menjadi buffer, tidak perlu dikonversi. Kemudian: data.toString ('hex');
Laurent Perrin

Jawaban:

209

Kode ini akan menunjukkan buffer data sebagai string hex:

buff.toString('hex');
Seryh
sumber
4
apakah kamu tahu bagaimana melakukan kebalikannya?
bubakazouba
20
bubakazouba: Buffer baru (buf.toString ('hex'), 'hex');
Seryh
2
[DEP0005] DeprecationWarning: Buffer () tidak digunakan lagi karena masalah keamanan dan kegunaan. Silakan gunakan metode Buffer.alloc (), Buffer.allocUnsafe (), atau Buffer.from () sebagai gantinya. Jadi sekarang seharusnyaBuffer.from( buf.toString('hex'),'hex');
flob
Ini kembali untuk saya [object ArrayBuffer]? apa yang salah?
Mamdouh Saeed
-2

Jawaban teratas adalah cara termudah untuk melakukannya.

Metode alternatif:

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
sumber
1
Jawaban ini sebenarnya berguna bagi saya, karena saya harus menggabungkannya dengan '-' agar dapat interop dengan C #. Suara positif.
Edza