Преобразование буфера в целое число в JavaScript

Я получаю этот буфер из своего последовательного порта:

<Buffer 04 02 08 dc>

Второй байт говорит, сколько байтов мне нужно для анализа моих данных ответа. Поэтому мне нужно разобрать эти два байта 08 dc и преобразовать их в long unsigned.

Как это сделать в JavaScript на сервере Node.js?

Они большие или маленькие? (т. е. вы хотите 0x08dc или 0xdc08?) Какое максимально возможное количество байтов? (Если long = 8 байт, обратите внимание, что JavaScript не может точно представить их без BigInt.)

Ry- 11.06.2019 17:31

В любом случае, почитайте здесь: nodejs.org/api/…

Ry- 11.06.2019 17:32

@Ry- спасибо за ответ, однако я действительно не знаю, являются ли они BE или LE, я просматривал API, прежде чем публиковать это: /, есть идеи, как это найти? Это должна быть какая-то спецификация?

bmvr 11.06.2019 17:35

Кроме того, используя API-интерфейс nodejs для преобразования этих буферов, он дает мне странные числа, например, это невозможно для этого, я читаю мгновенное напряжение 2280 вольт, когда максимальное напряжение в моей стране составляет 220 В.

bmvr 11.06.2019 17:40

В JavaScript нет такого понятия, как «длинный беззнаковый». Что ты собираешься делать с целым числом? Может быть, лучше держать их в буфере.

Bergi 11.06.2019 17:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
5
6 730
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

buf.readInt32BE([смещение]) и buf.readInt32LE([смещение]) позволяет читать 32-битное целое число из 4 байтов, начиная с offset.

Reads a signed 32-bit integer from buf at the specified offset with the specified endian format (readInt32BE() returns big endian, readInt32LE() returns little endian).

Integers read from a Buffer are interpreted as two's complement signed values.

Спасибо. Я прочитал документы, и все, что вы сказали, было правильно, я просто не понял документы моего измерителя мощности.

bmvr 11.06.2019 17:51

@bmvr, я рад, что ты разобрался. Существуют варианты, которые принимают аргумент byteLength, который может работать с вашим требованием «2-й байт говорит ...», но не для byteLengths> 6, потому что JavaScript использует числа с плавающей запятой с мантиссой 52b.

Mike Samuel 11.06.2019 18:46

Другие вопросы по теме