有人可以解释一下,为什么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方法的可选参数。
但我的问题是:为什么这不是默认设置的?
答案 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网络协议的默认字节顺序,并不是很少见。