Я получаю этот буфер из своего последовательного порта:
<Buffer 04 02 08 dc>
Второй байт говорит, сколько байтов мне нужно для анализа моих данных ответа. Поэтому мне нужно разобрать эти два байта 08 dc
и преобразовать их в long unsigned
.
Как это сделать в JavaScript на сервере Node.js?
В любом случае, почитайте здесь: nodejs.org/api/…
@Ry- спасибо за ответ, однако я действительно не знаю, являются ли они BE или LE, я просматривал API, прежде чем публиковать это: /, есть идеи, как это найти? Это должна быть какая-то спецификация?
Кроме того, используя API-интерфейс nodejs для преобразования этих буферов, он дает мне странные числа, например, это невозможно для этого, я читаю мгновенное напряжение 2280 вольт, когда максимальное напряжение в моей стране составляет 220 В.
В JavaScript нет такого понятия, как «длинный беззнаковый». Что ты собираешься делать с целым числом? Может быть, лучше держать их в буфере.
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, я рад, что ты разобрался. Существуют варианты, которые принимают аргумент byteLength
, который может работать с вашим требованием «2-й байт говорит ...», но не для byteLengths> 6, потому что JavaScript использует числа с плавающей запятой с мантиссой 52b.
Они большие или маленькие? (т. е. вы хотите 0x08dc или 0xdc08?) Какое максимально возможное количество байтов? (Если long = 8 байт, обратите внимание, что JavaScript не может точно представить их без BigInt.)