Преобразовать двоичные данные ArrayBuffer / TypedArray в шестнадцатеричную строку - PullRequest
0 голосов
/ 11 декабря 2019

Я хотел бы получить строку контрольной суммы из двоичного файла, который я читаю. Контрольная сумма представлена ​​значением Uint32, но как мне преобразовать ее в текст? Целочисленное значение равно 1648231196, а соответствующий текст должен быть «1c033e62» (известный через утилиту метаданных). Обратите внимание, я не пытаюсь вычислить контрольную сумму, а только пытаюсь преобразовать байты, представляющие контрольную сумму, в строку.

1 Ответ

3 голосов
/ 11 декабря 2019

Есть два способа, которыми вы можете прочитать байты: Big-Endian и Little-Endian .

Ну, "контрольная сумма", которую вы предоставляете, является "шестнадцатеричной" в Little-Endian. Таким образом, мы можем создать буфер и установить число, определяющее представление Little-Endian.

// Create the Buffer (Uint32 = 4 bytes)
const buffer = new ArrayBuffer(4);

// Create the view to set and read the bytes
const view = new DataView(buffer);

// Set the Uint32 value using the Big-Endian (depends of the type you get), the default is Big-Endian
view.setUint32(0, 1648231196, false);

// Read the uint32 as Little-Endian Convert to hex string
const ans = view.getUint32(0, true).toString(16);

// ans: 1c033e62

Всегда указывайте третий параметр в DataView.setUint32 и второй в DataView. getUint32 . Это определяет формат "Endian". Если вы не установите его, вы можете получить неожиданные результаты.

...