为什么 Javascript TypeDArray 不工作?

Why is Javascript TypeDArray not working?

我有 4 个字节的 ArrayBuffer,我使用数据视图在索引 0 处分配了一个数字。当我尝试使用 dataview 获取正确给出结果的值但当我尝试使用类型化数组获取值时它没有给出正确的结果。任何人都可以帮忙吗?这是代码:

var buffer = new ArrayBuffer(4);
var dataview = new DataView(buffer);
dataview.setUint32(0,5000);

var unint32 = new Uint32Array(buffer);

console.log(unint32[0]); //2282946560 instead of 5000
console.log(dataview.getUint32(0)); //shows correctly 5000

那是因为您在使用 setUint32 时使用了错误的字节序类型。具体来说,您需要它来存储小端表示法,因为您的硬件就是这样。

您可以使用十六进制值更容易地看到这一点。现在,5000 === 0x1388,而 2282946560 = 0x88130000。你能看出这里的规律吗?

试试这个:

dataview.setUint32(0, 5000, true);

var unint32 = new Uint32Array(buffer);

console.log(unint32[0]); // 5000, yay!

正如 apsillers 指出的那样,如果您要使用 dataview 来检索值,您还必须使用 dataview.getUint32(0, true).

最后一句话,如果您只需要使用 Uint32 个数字,请忘记 DataView 并立即使用类型化数组:

var buffer = new ArrayBuffer(4);
var unint32 = new Uint32Array(buffer);
unint32[0] = 5000;

你永远不会弄错的。

另一方面,如果您需要用原始二进制数据填充 ArrayBuffer,您希望用 this little trick.

检查硬件的字节顺序