嗨,我是一名正在学习 JavaScript 的初学者程序员。当我查看源代码时,我创建了一个带有 DataView(缓冲区)的视图,并使用 setUint32 将值放入位置 0。当我再次使用 Uint32Array 加载缓冲区时,为什么值 536870912 没有更改为 32?
var buffer = new ArrayBuffer(76);
var view = new DataView(buffer);
var value = 20000000;
// set value 536807912
view.setUint32(0, parseInt(value, 16));
// [17/05/2019 10:00:20.149] [LOG] getUint32 536870912
console.log('getUint32 ' + view.getUint32(0));
var test = new Uint32Array(buffer);
/* [17/05/2019 10:00:20.150] [LOG] Uint32Array [ 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] */
console.log(test);
您看到 32 使用的原因Uint32Array
是由于Endianness。使用 a 时DataView
,setUint32
和getUint32
函数有一个附加参数littleEndian
,如果省略它,则默认为大端。然后,使用 a Uint32Array
,它将使用您系统的字节序,在这种情况下是小字节序。
因此,Uint32Array
如果您使用 big-endian 设置值,然后使用 little-endian 检索它,结果为 32。
为了说明这一点,以下是使用不同字节顺序的两个值:
536870912 =
Little-endian: 00 00 00 20
Big-endian: 20 00 00 00
32 =
Little-endian: 20 00 00 00
Big-endian: 00 00 00 20
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句