nodejs rawバッファデータを16進文字列として表示する方法


95

次のコードは、SerialPortモジュールを使用して、Bluetooth接続からのデータをリッスンします。

16進形式のデータストリームがコンソールに出力されるのを期待しています。しかし、コンソールにはいくつかの奇妙なシンボルが表示されます。コンソールでデータをデコードして表示する方法を知りたい。

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
データはすでにバッファであり、変換する必要はありません。次に:data.toString( 'hex');
Laurent Perrin 2013

回答:


207

このコードは、データバッファーを16進文字列として表示します。

buff.toString('hex');

4
逆を行う方法を知っていますか?
bubakazouba

20
bubakazouba:新しいBuffer(buf.toString( 'hex')、 'hex');
Seryh

2
[DEP0005] DeprecationWarning:安全性と使いやすさの問題により、Buffer()は廃止されました。代わりに、Buffer.alloc()、Buffer.allocUnsafe()、またはBuffer.from()メソッドを使用してください。だから今それはあるはずですBuffer.from( buf.toString('hex'),'hex');
フロッブ

戻ります[object ArrayBuffer]か?どうしましたか?
Mamdouh Saeed

-2

トップの答えはそれを行う最も簡単な方法です。

別の方法:

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
この答えは、C#と相互運用するために「-」で結合する必要があるため、実際に役立ちました。賛成。
Edza
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.