Jeśli skonwertuję znak na byte
, a następnie z powrotem na char
, ta postać w tajemniczy sposób znika i staje się czymś innym. Jak to jest możliwe?Konwersja bajtów i znaków w języku Java
Jest to kod:
char a = 'È'; // line 1
byte b = (byte)a; // line 2
char c = (char)b; // line 3
System.out.println((char)c + " " + (int)c);
Do linii 2 wszystko jest w porządku:
W wierszu 1 mogłem wydrukować "a" w konsoli i byłoby pokazać "e".
W linii 2 mogłem wydrukować "b" w konsoli i pokazywałoby -56, czyli 200 ponieważ bajt jest podpisany. A 200 to "È". Więc nadal jest w porządku.
Co jest nie tak w linii 3? "c" staje się czymś innym, a program drukuje ? 65480
. To coś zupełnie innego.
Co powinienem napisać w wierszu 3, aby uzyskać poprawny wynik?
"Bajt" to "8 bitów".'char' to' 16 bit'. Masz pomysł? –
char pobiera 2 bajty. – Ankit
@RohitJain A znak - przez co rozumiem kodowy kod Unicode - może zająć dwa znaki lub cztery bajty. Co więcej, kto wie, czym jest normalizacja? Ciąg '" È "' może sam zawierać jeden lub dwa punkty kodowe, zależnie od tego, czy ma on odpowiednio postać Normalizacji C lub D. – tchrist