转换错误:ArrayBuffer到Int16Array

时间:2014-09-30 03:42:45

标签: javascript firefox arraybuffer

这应该是直截了当的,但我不知道为什么我得到错误,我使用带有ArrayBuffer的构造函数作为参数,如mdn所示,但我得到错误作为无效参数,(ps用dataview我检查过,数据只是Int16)

代码是:

        var view= DataView(arrayBuf);
        console.log('arrayBuf.byteLength : '+arrayBuf.byteLength);
        console.log('data at 0 : '+view.getInt16(0));
        console.log('data at 1 : '+view.getInt16(1));
        var int16arry = new Int16Array(arrayBuf);

控制台输出是:

"arrayBuf.byteLength : 117" 
"data at 0 : 22720" 
"data at 1 : -16315"
Error: invalid arguments

我的错误是什么?

1 个答案:

答案 0 :(得分:0)

简短的回答是你的arrayBuffer大小错误。您可以使用:

var int16Array = new Int16Array(arrayBuf, 0, Math.floor(arrayBuf.byteLength / 2));

破解远离问题。

案例特定评论:
我试过阅读你的库的源代码,但我无法理解为什么你得到那个额外的字节(或者缺少的东西)。
你得到的数据应该是16位整数,但由于某种原因你有其他数据占用不均匀的字节数,据我所知,根据来源我应该有一些双打(javascript浮点数)在那里,意味着“黑客”解决问题可能不起作用。