Wenn ich ein Zeichen zu byte
und dann zurück zu char
umwandle, verschwindet dieser Charakter auf mysteriöse Weise und wird etwas anderes. Wie ist das möglich?Byte und Zeichenumwandlung in Java
Dies ist der Code:
char a = 'È'; // line 1
byte b = (byte)a; // line 2
char c = (char)b; // line 3
System.out.println((char)c + " " + (int)c);
Bis Linie 2 ist alles in Ordnung:
In Zeile 1 konnte ich "a" in der Konsole aus und es würde zeigen, "E".
In Zeile 2 konnte ich "b" in der Konsole drucken und es würde -56 angezeigt, das ist 200, da Byte signiert ist. Und 200 ist "È". Es ist also immer noch in Ordnung.
Aber was ist falsch in Zeile 3? "c" wird zu etwas anderem und das Programm druckt ? 65480
. Das ist etwas ganz anderes.
Was sollte ich in Zeile 3 schreiben, um das richtige Ergebnis zu erhalten?
Ein 'Byte' ist' 8 Bit'.'char' ist' 16 bit'. Hast du die Idee? –
char dauert 2byte. – Ankit
@RohitJain Und ein Zeichen - mit dem ich einen Unicode-Code-Punkt meine - kann zwei Zeichen oder vier Bytes dauern. Wer weiß außerdem, in welcher Normalisierung Form ist? Die Zeichenkette "" kann selbst einen oder zwei Codepunkte umfassen, abhängig davon, ob sie sich in der Normalisierungsform C oder D befindet. – tchrist