【问题标题】:How to display nodejs raw Buffer data as Hex string如何将nodejs原始缓冲区数据显示为十六进制字符串
【发布时间】:2013-09-18 18:40:48
【问题描述】:

以下代码使用 SerialPort 模块从蓝牙连接监听数据。

我希望在控制台中看到以十六进制格式打印的数据流。但是控制台只显示了一些奇怪的符号。我想知道如何在控制台中解码和显示数据。

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

【问题讨论】:

  • 数据已经是缓冲区,不需要转换。然后:data.toString('hex');

标签: node.js buffer


【解决方案1】:

此代码将数据缓冲区显示为十六进制字符串:

buff.toString('hex');

【讨论】:

  • 你知道怎么做相反的吗?
  • bubakazouba: 新缓冲区( buf.toString('hex'), 'hex');
  • [DEP0005] DeprecationWarning:由于安全性和可用性问题,不推荐使用 Buffer()。请改用 Buffer.alloc()、Buffer.allocUnsafe() 或 Buffer.from() 方法。所以现在应该是Buffer.from( buf.toString('hex'),'hex');
  • 它返回给我[object ArrayBuffer]?怎么了?
【解决方案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('');

【讨论】:

  • 这个答案对我来说实际上很有用,因为我必须用'-'加入它才能与 C# 互操作。赞成。
猜你喜欢
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2019-04-20
  • 1970-01-01
  • 2017-09-28
  • 2016-03-14
相关资源
最近更新 更多