Что эквивалентно DWORD в NodeJS? - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь переписать протокол в NodeJS из документации, написанной для C #.

Я читаю из индексного файла и вот описание того, как устроен буфер.

enter image description here enter image description here

Из того, что я прочитал, DWORD - это просто 32-разрядное целое число без знака. Однако всякий раз, когда я читаю байты длины с indexFileBuffer.readUInt32BE(offset), я получаю гораздо большую длину, чем ожидалось.

Очевидно, readUInt32BE() не является эквивалентом dword, или dword должен обрабатываться по-разному в зависимости от некоторыхкритерии.

Буду очень признателен за понимание правильного расчета значения.

1 Ответ

1 голос
/ 21 октября 2019

Правильными функциями для получения DWORD (32-разрядного целого без знака) из буфера являются:

buf.readUInt32BE(offset)

или

buf.readUInt32LE(offset)

Вам необходимо знать, являются ли ваши данныепорядок байтов с прямым или прямым порядком байтов для выбора правильного варианта из двух.


Если вы используете это и не получаете ожидаемое вами значение, то одно из трехдолжно продолжаться:

  1. Данные, которые вы ожидаете в буфере, не соответствуют тому, что там есть
  2. Вы не используете правильную "порядковую" версию
  3. Ваше смещение в буфер, где вы читаете, неверно

К вашему сведению, Intel использует порядок байтов с прямым порядком байтов, ARM использует порядок байтов с прямым порядком байтов. Подробнее о "endinan-ness" здесь .

...