Uint32Array(buffer,byteOffset,length)无法按预期工作

时间:2011-12-07 17:37:22

标签: javascript typed-arrays

According to MSDN我可以通过3种方式创建Uint32Array

  1. new Uint32Array( length );
  2. new Uint32Array( array );
  3. new Uint32Array( buffer, byteOffset, length );
  4. 第一种和第二种方法效果很好,但第三种方法对我不起作用。这段代码有什么问题?

    var buffer = new ArrayBuffer(8);
    var uint32s = new Uint32Array(buffer, 4, 4);
    uint32s[0] = 0x05050505;
    var uint8s = new Uint8Array(buffer);
    for (var i =0; i< 8; i++)
    {
        alert(uint8s[i]);
    }
    

    这很好,但当然byteOffset = 0

    var uint32s = new Uint32Array(buffer);
    

1 个答案:

答案 0 :(得分:6)

这里的文档似乎不正确,因为length不是一个字节数,而是Uint32Array将包含的32位整数的数量。

展览A

将代码更改为var uint32s = new Uint32Array(buffer, 4, 1);有效。

图表B

documentation for Uint32Array on MDN表示length是项目数,而不是字节数。

图表C

让构造函数接受 bytes 中的长度并没有多大意义。如果length不是4的倍数会怎么样?