2016-07-11 13 views
2

In JavaScript, ich brauche zwei Bytes in eine 16-Bit-Ganzzahl zu konvertieren, so dass I einen Strom von Audiodaten in ein Feld von signierten PCM-Werten umwandeln kann.Umwandlung von zwei Bytes in vorzeichenbehaftete 16 Bit-Ganzzahl in JavaScript

meisten Antworten online Bytes auf 16-Bit-Integer Umwandlung verwenden Sie die folgende, aber es funktioniert nicht richtig für negative Zahlen.

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

Antwort

1

Sie müssen bedenken, dass die Negative in 2 Kompliment vertreten sind, und dass JavaScript verwendet 32 ​​Bit-Integer bitweise Operationen auszuführen. Aus diesem Grund, wenn es ein negativer Wert ist, müssen Sie mit 1 der in den ersten 16 Bits der Zahl füllen. So, hier ist eine Lösung:

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 
}