Convert two bytes into signed 16 bit integer in JavaScript
Asked Answered
D

1

10

In JavaScript, I need to convert two bytes into a 16 bit integer, so that I can convert a stream of audio data into an array of signed PCM values.

Most answers online for converting bytes to 16 bit integers use the following, but it does not work correctly for negative numbers.

var result = (((byteA & 0xFF) << 8) | (byteB & 0xFF));
Dewie answered 11/7, 2016 at 2:41 Comment(0)
D
14

You need to consider that the negatives are represented in 2's compliment, and that JavaScript uses 32 bit integers to perform bitwise operations. Because of this, if it's a negative value, you need to fill in the first 16 bits of the number with 1's. So, here is a solution:

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
}
Dewie answered 11/7, 2016 at 2:41 Comment(1)
Could you please help me with converting only one byte?Medawar

© 2022 - 2024 — McMap. All rights reserved.