Wie Maske byte-Wert in Java?
Mein problem ist, dass einige wie dieser.
Ich habe ein paar Berechnungen in byte in Java. In einigen Berechnungen bekomme ich mein gewünschtes Ergebnis "2a" in der byte-Wert, aber in einigen Berechnungen bekomme ich "ffffff9a" in byte-Wert. Ich will nur die "9a" Wert von dem Ergebnis "ffffff9a". Ich habe versucht, diese aber nicht funktioniert hat.
byte a = (byte) b & 0xff;
wobei b den Wert "ffffff9a" byte-Wert.
Aber während der Anzeige der gleiche Prozess funktioniert wie
System.out.println(Integer.toHexString(b & 0xff));
Wohin gehe ich falsch? Was kann ich tun, um meinen gewünschten Wert?
Dank
Eigentlich bin ich versucht zu konvertieren 8-bit-Zeichen in gsm 7-bit. Auch wenn da jemand mir helfen kann, durch diese, wäre es ebenfalls hilfreich sein. String wird gespeichert als ein byte-array und ich habe zu konvertieren, das string oder 8-bit-bytes in 7 bit.
Scheint gut zu mir
System.out.println(Integer.toHexString(0xffffff9a & 0xff));
Drucke 9a
ideone.com/ikxuOja b ist vom Typ byte, und auch der Druck ist in Ordnung, ich will speichern des Werts in einer Variablen, wo das problem ist
InformationsquelleAutor bunkdeath | 2011-07-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
byte
Datentyp in Java ist unterzeichnet. Es hat einen Bereich von [-128, 127].Zeigen würde, "den richtigen Wert", obwohl
a
, die den Typbyte
wird enthalten, die einen negativen Wert ((byte)0x92
). Das ist(int)a == 0x92
wird falsch sein, weil der cast zuint
hält der Wert, negativ-und das alles, während(a & 0xff) == 0x92
wahr werden. Dies ist, da die bit-Weise&
fördert die expression einerint
geben Sie, während "Maskierung entfernt" das "Vorzeichen-bit" (nicht wirklich Vorzeichenbit, aber Artefakt der Zweierkomplement).Finden Sie unter: Java Wie "Verdeckte" Bytes
Happy coding.
InformationsquelleAutor
Ihre ursprüngliche code war:
byte a = (byte) b & 0xff;
Den
(byte)
typecast nur angewendet, um dieb
, das ist schon einbyte
. Die&
Betreiber dann verbreitert, um eineint
so hast du das Ergebnis "ffffff9a" aus derint
.Müssen Sie sicherstellen, dass Sie die Typumwandlung gilt für das Ergebnis der
&
, nicht nur an seine erste operand:byte a = (byte)(b & 0xff);
Beachten Sie das zusätzliche paar Klammern.
InformationsquelleAutor rossum
InformationsquelleAutor Alexander Chen