2
在JavaScript中,我需要将两个字节转换为16位整数,以便我可以将音频数据流转换为带符号PCM值的数组。在JavaScript中将两个字节转换为带符号的16位整数
大多数在线转换字节为16位整数的答案使用以下内容,但对于负数不能正确工作。
var result = (((byteA & 0xFF) << 8) | (byteB & 0xFF));
在JavaScript中,我需要将两个字节转换为16位整数,以便我可以将音频数据流转换为带符号PCM值的数组。在JavaScript中将两个字节转换为带符号的16位整数
大多数在线转换字节为16位整数的答案使用以下内容,但对于负数不能正确工作。
var result = (((byteA & 0xFF) << 8) | (byteB & 0xFF));
您需要考虑否定符表示为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
}