Frage

Ich bin auf ein Problem gestoßen, als ich einen C-Code in PHP konvertiere, insbesondere bei der Verwendung des Rechtsschichtoperators.

bearbeiten: In den folgenden Beispielen bit = 0;

Original C -Code:

p->param->outBits[bytePtr++] |= codeword >> (9 + bit);

PHP -Code:

$outBits[$bytePtr++] |= $codeword >> (9 + $bit);

Wenn ich anfange mit codeword 130728 in CI erhalten das erwartete Ergebnis von -1. In PHP bekomme ich 255. Ich verstehe, dass dies mit arithmetischen/logischen Verschiebungsunterschieden zu tun hat, und das negative Vorzeichen wird aufgrund der MSBs, die bei Null bleibt, nicht eingeführt.

Gibt es eine "schnelle" Möglichkeit, das oben genannte in PHP zu tun, das sich nicht um das Verschieben beinhaltet? zB über grundlegende Arithmetik oder ähnliches, das gibt mir die erwartete Antwort?

War es hilfreich?

Lösung

Ihr Problem ist, dass PHP keinen Typ hat byte, es hat nur integer Dies ist normalerweise 32 Bit (nicht 8). Wenn Sie dort also wirklich einen negativen Wert benötigen (die Bits sind sowieso korrekt, da nicht signiert 255 mit -1 sind), sollten Sie wahrscheinlich die fehlenden 24 addieren oder Arithmetics zu verwenden. Stellen Sie den negativen Wert wieder her (255 ist -1, 254 -2 und so bei IE 256 -x = -x).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top