在 JavaScript 中,我需要将两个字节转换为 16 位整数,以便可以将音频数据流转换为带符号的 PCM 值数组。
大多数将字节转换为 16 位整数的在线答案都使用以下内容,但它对于负数无法正常工作。
var result = (((byteA & 0xFF) << 8) | (byteB & 0xFF));
最佳答案
您需要考虑负数以 2 的补码表示,并且 JavaScript 使用 32 位整数来执行按位运算。因此,如果是负值,则需要将数字的前 16 位补为 1。所以,这里有一个解决方案:
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
}
关于javascript - 在 JavaScript 中将两个字节转换为有符号 16 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298412/