在JavaScript中将两个字节转换为带符号的16位整数

时间:2016-07-11 02:41:24

标签: javascript audio byte pcm

在JavaScript中,我需要将两个字节转换为16位整数,这样我就可以将音频数据流转换为带符号的PCM值数组。

大多数在线将字节转换为16位整数的答案都使用以下内容,但它对负数无效。

var result = (((byteA & 0xFF) << 8) | (byteB & 0xFF));

1 个答案:

答案 0 :(得分:5)

你需要考虑负面用2的恭维来表示,并且JavaScript使用32位整数来执行按位运算。因此,如果它是负值,则需要用1填充数字的前16位。所以,这是一个解决方案:

var sign = byteA & (1 << 7);
var x = (((byteA & 0xFF) << 8) | (byteB & 0xFF));
if (sign) {
   result = 0xFFFF0000 | x;  // fill in most significant bits with 1's
}