2013-08-28 60 views
3

如果我只是愚蠢的,我会很高兴她。 :)是否在Firefox OS模拟器中破坏了Uint8Array/Uint16Array转换?

这里是我的代码:

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]); 

,这里是我得到的输出:

[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 

从文档我希望:

2 
513 
1027 

在现实项目我正在使用一个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模拟器是5.0pre3在W7/64机器。

+0

请注意,您只能获得513和1027(固定传递.buffer后)上小端机器。在一个big-endian机器上,你会得到258和772. –

回答

4
var t8 = new Uint8Array([1, 2, 3, 4]), 
    t16 = new Uint16Array(t8); 

这样的Uint16Array constructor将把t8像普通阵列(就像Uint8Array确实数组文本),并构造一个新的数组(缓冲器),以该元素被复制。

要建立在同一个ArrayBufferArrayBufferView,则需要该缓冲区传入构造:

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]); 
+0

好极了!而已。非常感谢。 – MumpiH