У меня есть переменная Uint8Arr типа Uint8Array [4].

Uint8Arr[0]=0x12;
Uint8Arr[1]=0x19;
Uint8Arr[2]=0x21;
Uint8Arr[3]=0x47;

Я хочу преобразовать Uint8Arr в эквивалентное ему целое число, то есть 0x12192147 или 303636807.

Я хотел бы иметь функцию, которая может преобразовывать Uint8Arr [n] в эквивалентное целое число и возвращать результат в десятичном формате.

3
user6064424 6 Сен 2016 в 13:17

3 ответа

Лучший ответ

Это решение подойдет для Uint8Arr любой длины.

function convert(Uint8Arr) {
    var length = Uint8Arr.length;

    let buffer = Buffer.from(Uint8Arr);
    var result = buffer.readUIntBE(0, length);

    return result;
}
3
user781486 6 Сен 2016 в 10:56

Для тех, кому нужен прямой порядок байтов, вы можете указать порядок байтов с помощью DataView класс.

let buff = new Uint8Array(4);
buff[0]=0x12;
buff[1]=0x19;
buff[2]=0x21;
buff[3]=0x47;
var view = new DataView(buff.buffer, 0);
view.getUint32(0, true); // true here represents little-endian
2
David Noreña 14 Окт 2020 в 03:13

Это одно из решений:

let Uint8Arr = new Uint8Array(4);

Uint8Arr[0]=0x12;
Uint8Arr[1]=0x19;
Uint8Arr[2]=0x21;
Uint8Arr[3]=0x47;

let buffer = Buffer.from(Uint8Arr);

console.log( buffer.readUInt32BE(0) );
2
robertklep 6 Сен 2016 в 10:50