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

  • new Uint32Array( length );
  • new Uint32Array( array );
  • new Uint32Array( buffer, byteOffset, length );

  • 第一种和第二种方法效果很好,但是第三种方法对我却不起作用。这段代码有什么问题?
    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);
    

    最佳答案

    此处的文档似乎不正确,因为length不是字节数,而是Uint32Array将包含的32位整数。

    展览

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

    展览B

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

    展览C

    让构造函数接受一个以字节为单位的长度并没有任何意义。如果length不是4的倍数应该怎么办?

    关于javascript - Uint32Array(buffer,byteOffset,length)不能按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8419865/

    10-09 20:44