如果我只是愚蠢,我会很高兴她。 :)
这是我的代码:
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位值。
我的期望是错的吗?至少我是如何阅读&#34;使用复杂的数据结构&#34;在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。
答案 0 :(得分:5)
var t8 = new Uint8Array([1, 2, 3, 4]), t16 = new Uint16Array(t8);
这样Uint16Array
constructor会将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]);