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

2023-11-24

在 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中将两个字节转换为有符号 16 位整数 的相关文章