nodejs 원시 버퍼 데이터를 16 진수 문자열로 표시하는 방법


96

다음 코드는 SerialPort 모듈을 사용하여 블루투스 연결에서 데이터를 수신합니다.

콘솔에 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

답변:


209

이 코드는 데이터 버퍼를 16 진수 문자열로 표시합니다.

buff.toString('hex');

4
반대로하는 방법을 알고 있습니까?
bubakazouba

20
bubakazouba : new Buffer (buf.toString ( 'hex'), 'hex');
Seryh

2
[DEP0005] DeprecationWarning : Buffer ()는 보안 및 사용성 문제로 인해 더 이상 사용되지 않습니다. 대신 Buffer.alloc (), Buffer.allocUnsafe () 또는 Buffer.from () 메소드를 사용하십시오. 그래서 지금은Buffer.from( buf.toString('hex'),'hex');
flob

그것은 나를 위해 돌아온다 [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.