为什么Big Endian默认使用DataView?

时间:2018-04-25 15:06:36

标签: javascript endianness

有人可以解释一下,为什么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

我期待数字类型的小端。这不一致。 我知道litleEndian的DataView方法的可选参数。 但我的问题是:为什么这不是默认设置的?

1 个答案:

答案 0 :(得分:0)

这是ECMAscript标准定义的setUint32方法的原型:

24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )https://www.ecma-international.org/ecma-262/6.0/#sec-dataview-constructor)。

值是存储为小端还是大端由可选的第3个参数定义,其默认值由标准定义为false(存储为大端)。

Big endian是所有TCP / IP网络协议的默认字节顺序,并不是很少见。