Почему DataView по умолчанию в Big Endian? - PullRequest
0 голосов
/ 25 апреля 2018

Может кто-нибудь объяснить, почему DataView использует порядок байтов Big Endian? Пока наши компьютеры работают с Little Endian. Также ARM процессоры.

Массивы типа Uint32Array() уже используют Little Endian. На мой взгляд, это правильно.

// DataView (Big Endian)
const dataview = new DataView(new ArrayBuffer(4));
dataview.setUint32(0, 42);
console.log(new Uint8Array(dataview.buffer).toString());
// result: 0,0,0,42

// Typed Array (Little Endian)
const typearray = new Uint32Array([42]);
console.log(new Uint8Array(typearray.buffer).toString());
// result: 42,0,0,0

Я ожидал, что для числовых типов будет порядок байтов. Это не соответствует. Я знаю необязательный аргумент методов DataView для litleEndian. Но мой вопрос: почему это не установлено по умолчанию?

1 Ответ

0 голосов
/ 25 апреля 2018

Это прототип для метода setUint32, определенного стандартом ECMAscript:

24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] ) (https://www.ecma -international.org / ecma-262 / 6.0 / # sec-dataview-конструктор ).

Хранится ли значение в виде байтов с прямым порядком байтов или байтов с прямым порядком байтов, определяется необязательным 3-м параметром, значение по умолчанию которого определяется стандартом как ложным (хранить как байтовый порядок).

Порядковый порядковый номер - это порядок байтов по умолчанию для всех сетевых протоколов TCP / IP, и это не редкость.

...