在Firefox OS模拟器中是否破坏了Uint8Array/Uint16Array转换?

Mum*_*piH 4 javascript firefox firefox-os

如果我只是愚蠢,我会很高兴她.:)

这是我的代码:

var t16 = new Uint16Array( new Uint8Array([1, 2, 3, 4]));
console.log(t16.BYTES_PER_ELEMENT);
for( var i = 0; i < t16.length; i++) 
    console.log(t16[i]);
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

[02:56:32.197] 2
[02:56:32.197] 1
[02:56:32.197] 2
[02:56:32.197] 3
[02:56:32.197] 4
Run Code Online (Sandbox Code Playgroud)

从我期望的文档:

2
513
1027
Run Code Online (Sandbox Code Playgroud)

在真正的项目中,我使用的是一个tar库,它提供了一个包含我想要读取的16位数据的ArrayBuffer,但我总是只能访问8位值.

我的期望是错的吗?至少我是这样阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays中的 "使用复杂数据结构"部分的方式

对于记录:Firefox是23.0.1,Java是平台SE 7 U25 10.25.2.17,Firefox OS模拟器是W7/64机器上的5.0pre3.

Ber*_*rgi 5

var t8 = new Uint8Array([1, 2, 3, 4]),
    t16 = new Uint16Array(t8);
Run Code Online (Sandbox Code Playgroud)

这样,Uint16Array构造函数会将t8类似于普通数组(就像Uint8Array数组文字一样),并将构造一个复制元素的新数组(缓冲区).

要创建ArrayBufferView相同的ArrayBuffer,您需要将该缓冲区传递给构造函数:

var t8=new Uint8Array([1, 2, 3, 4]),
    t16 = new Uint16Array( t8.buffer );
//                           ^^^^^^^
console.log(t16.byteLength/t16.length); // or: t16.constructor.BYTES_PER_ELEMENT
for (var i = 0; i < t16.length; i++)
    console.log(t16[i]);
Run Code Online (Sandbox Code Playgroud)