2016-09-21 7 views
1

ich diese Lösung auf Stackoverflow zum Umwandeln eines Byte auf ein Zeichen gefunden:Java Umwandlung Byte verkohlen - Umwandlung Fragen

byte b = 65; 
char c = (char)(b & 0xFF); 

Was ich nicht bekommen, die bitweise ist und mit 0xFF. Wie unterscheidet sich das obige von diesem?

Kann mir jemand Schritt für Schritt erklären, was zu welchem ​​Typ konvertiert wird?

+4

Duplizierung http://stackoverflow.com/questions/17912640/byte-and-char-conversion-in-java –

Antwort

1

"& 0xff" wird normalerweise in Java verwendet, um die Vorzeichenerweiterung für implizite Konvertierungen von Bytes zu größeren Integer-Typen zu trennen.

In Java ist Byte ein Datentyp mit Vorzeichen, in dem Werte unter Verwendung von Zweierkomplement gespeichert werden. Daher wird -1 als 0xff dargestellt. Die entsprechende int-Darstellung von -1 ist 0xffffffff. Somit werden beim Konvertieren von einem Byte in eine ganze Zahl alle zusätzlichen führenden Bits vom höchsten Bit des Bytes gefüllt.

Die bitweise Angabe wird für Bytewerte bis 0x7f nicht benötigt. Wenn Sie jedoch ein z. ein nicht-brechendes Leerzeichen (Codepunkt 160/0xa0), würde das Zeichen auf 0xffa0 erweitert, was ein anderes Zeichen als der beabsichtigte Zeichenwert von 0x00a0 ist.

+1

Ich denke, die Sache, die mich abwarf war, dass 0xFF ein int und kein Byte ist. –