如何根据数据类型正确访问数据视图中的元素?
考虑以下示例代码:
const data = new Uint16Array([7, 12, 100]);
const view = new DataView(data.buffer);
console.log(view.getUint16(0), view.getUint16(1), view.getUint16(3));
输出为
1792 12 100
。第一个元素是错误的,并且其他元素偏移量不是 16 位类型所建议的 2 的倍数。使用 view.getUint8(0)
会输出 7
。
使用
.getTYPE()
访问数据视图中的元素的正确方法是什么?
真正的用例是一个二进制文件,它作为混合大小值的
ArrayBuffer
读入。
您在
getUint16
调用中使用了错误的偏移量。偏移量基于数据类型,在本例中为 16。16 位是 2 个字节,因此每个 16 位整数的偏移量应以 2 为增量。
请注意,
getTYPE
方法有第二个参数,它指定字节顺序,无论是大端还是小端。大多数时候你会想要使用小端,这需要你传递 true
作为第二个参数。
const data = new Uint16Array([7, 12, 100]);
const view = new DataView(data.buffer);
console.log(view.getUint16(0, true));
console.log(view.getUint16(2, true));
console.log(view.getUint16(4, true));