splincodewd
@splincodewd
Developer

Как обработать правильно buffer на NodeJS?

У меня есть файл, в который записываются данные с usb-устройства (термометр)
Он присылает hex-данные

По факту мне нужно считывать последние 2 байта в файле (и перевести в десятичную систему данное число)

Но никак не получается этого сделать

1. если попытаться считать файл, мы видим, что все это в своей кодировке
$  cat stream/temperature.txt
''''''''q'U


Я так понял новое значение отделяется кавычкой

2. Но если по смыслу прочитать файл (устройство отсылает данные в hex-формате и сохраняет в мой файл)
$ tail stream/temperature.txt|xxd 
00000000: 2700 fd27 00f9 2701 a327 019d 2701 9b27 0105 2700 ef27 0171 2701 55


В нашем случае, правильные значения это (с конца):
01 55, 0171, 00 ef, 0105, 01 9b, 019d, ..

0x155 = 341 (то бишь 34.1 это температура)
0x0171 = 369 (36.9)
0x00ef = 239 (23.9)
0x019b = 41
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
@Aves
Чтобы получить 341 нужно последние два байта считать так:
> b
<Buffer 01 71 27 01 55>
> b.readUInt16BE(b.length - 2)
341
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
splincodewd
@splincodewd Автор вопроса
Developer
У тостера бага, он не хочет отображать код, который я пытаюсь описать в посте!
Пока прикладываю скрин

db7e7fe2d09e4b7898d4b32d068b05b7.png
Ответ написан
qertis
@qertis
Попробуйте конвертировать BUFFER в STREAM.
import Stream from 'stream'

function getBufferFromStream(buffer) {
  if (Buffer.isBuffer(bufer)) {
    const stream = new Stream.PassThrough()
    stream.end(bufer)
    return stream
  }
  throw new Error('Argument is not a buffer')
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы