Cách hiển thị dữ liệu Bộ đệm thô của nodejs dưới dạng chuỗi Hex


95

Đoạn mã sau sử dụng mô-đun SerialPort để nghe dữ liệu từ kết nối bluetooth.

Tôi đang mong đợi thấy một luồng dữ liệu ở định dạng Hệ thập lục phân được in trong bảng điều khiển. Nhưng giao diện điều khiển chỉ hiển thị một số simbols kỳ lạ. Tôi muốn biết cách giải mã và hiển thị dữ liệu trong bảng điều khiển.

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
dữ liệu đã là bộ đệm, không cần chuyển đổi. Sau đó: data.toString ('hex');
Laurent Perrin

Câu trả lời:


207

Mã này sẽ hiển thị bộ đệm dữ liệu dưới dạng một chuỗi hex:

buff.toString('hex');

4
bạn có biết làm thế nào để làm ngược lại?
bubakazouba

20
bubakazouba: Bộ đệm mới (buf.toString ('hex'), 'hex');
Seryh

2
[DEP0005] DeprecationWarning: Buffer () không được dùng nữa do các vấn đề về bảo mật và khả năng sử dụng. Thay vào đó, hãy sử dụng các phương thức Buffer.alloc (), Buffer.allocUnsafe () hoặc Buffer.from (). Vì vậy, bây giờ nó phải làBuffer.from( buf.toString('hex'),'hex');
flob

Nó trả lại cho tôi [object ArrayBuffer]? chuyện gì vậy?
Mamdouh Saeed

-2

Câu trả lời hàng đầu là cách đơn giản nhất để làm điều đó.

Một phương pháp thay thế:

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âu trả lời này thực sự hữu ích cho tôi, vì tôi phải nối nó với '-' để nó tương tác với C #. Đã ủng hộ.
Edza
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.