为什么Javascript类型Darray不工作?

为什么Javascript类型Darray不工作?,javascript,dataview,typedarray,Javascript,Dataview,Typedarray,我有4个字节的ArrayBuffer,我使用dataview在索引0处分配了一个数字。当我尝试使用正确给出结果的dataview获取值时,但当我尝试使用类型化数组获取值时,它没有给出正确的结果。有人能帮忙吗?代码如下: var buffer = new ArrayBuffer(4); var dataview = new DataView(buffer); dataview.setUint32(0,5000); var unint32 = new Uint32Array(buffer); c

我有4个字节的ArrayBuffer,我使用dataview在索引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

这是因为使用时使用了错误的endian类型。具体来说,您需要它来存储一点endian表示,因为您的硬件就是这样工作的

使用十六进制值可以更容易地看到这一点。现在,
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;
你永远不会弄错的


另一方面,如果您需要用原始二进制数据填充
阵列缓冲区
,则需要检查与@apsillers密切相关(或重复?)的硬件是否正确。我认为在这种情况下,我必须使用dataview.getUint32(0,true)