DataView 如何设置字节顺序

How setting endianess works for DataView

我正在阅读 DataView 的 this explanation,其中有一个示例:

var littleEndian = (function() {
  var buffer = new ArrayBuffer(2);
  new DataView(buffer).setInt16(0, 256, true /* littleEndian */);
  // Int16Array uses the platform's endianness.
  return new Int16Array(buffer)[0] === 256;
})();

我不太明白这一行的作用:

new DataView(buffer).setInt16(0, 256, true /* littleEndian */);

是否意味着存储在[0;256]位范围内的数据应该存储在littleEndian中?

假设我们像这样创建一个数组缓冲区和数组:

var dv = new DataView(new ArrayBuffer(4));

这意味着我们在内存中有 32 位:

0000 0000 0000 0000 0000 0000 0000 0000

现在,我们要存储数字 0x0103,其模式为:

0000 0001 0000 0011

现在,让我们将这个数字存储在前两个字节中使用小端,在后两个字节中使用大端,看看它在内存中的布局。所以:

dv.setInt16(0, 0x0103, true);
dv.setInt16(2, 0x0103, false);

现在,DataView 中的位具有以下模式:

0000 0011 0000 0001 0000 0001 0000 0011

下面是测试该行为的代码:

var little = dv.getUint16(0);
little === 0x0103 // false
little === 0x0301 // true

var big = dv.getUint16(2);
big === 0x0103 // true
big === 0x0301 // false