Poniżej znajduje się fragment kodu,
int a = 1;
char b = (char) a;
System.out.println(b);
Ale to, co otrzymuję, to puste wyjście.
int a = '1';
char b = (char) a;
System.out.println(b);
Otrzymam 1 jako moje wyjście.
Czy ktoś może to wyjaśnić? A jeśli chcę przekonwertować int na char, jak w pierwszym fragmencie, co mam zrobić?
b = (char)('0' + a)
ale tylko dla0 <= a <= 9
.Odpowiedzi:
wypisze znak z wartością ascii 1 (znak początku nagłówka, którego nie można wydrukować).
wypisze znak z wartością ascii 49 (odpowiadającą „1”)
Jeśli chcesz przekonwertować cyfrę (0-9), możesz dodać do niej 48 i rzucić, lub coś podobnego
Character.forDigit(a, 10);
.Jeśli chcesz przekonwertować
int
wartość ascii, możesz użyćCharacter.toChars(48)
na przykład.źródło
System.out.println('b'+3);
jak mogęb3
zamiast tego101
skorzystać z println? jakikolwiek inny sposób zamiast printf?Character.toChars
działa na punktach kodowych Unicode, a nie na wartościach ASCII. Otrzymasz to samo (tylko dla BMP), jeśli po prostu rzucisz int na char.Moja odpowiedź jest podobna do odpowiedzi jh314, ale wyjaśnię trochę głębiej.
W takim przypadku powinieneś zrobić:
Tutaj użyliśmy „0”, ponieważ znaki są w rzeczywistości reprezentowane przez wartości ASCII. „0” to znak oznaczony wartością 48.
Wpisaliśmy
(a + '0')
i aby je dodać, Java przekonwertowała „0” na wartość ASCII, która wynosi 48, a a wynosi 1, więc suma wynosi 49. Następnie zrobiliśmy:Zarzuciliśmy
int
dochar
. Odpowiednik 49 w ASCII to „1”. Możesz przekonwertować dowolną cyfrę na znak w ten sposób i jest to mądrzejszy i lepszy sposób niż użycie.toString()
metody, a następnie odjęcie cyfry według.charAt()
metody.źródło
Wygląda na to, że szukasz
Character.forDigit
metody:Istnieje również metoda, która może przekształcić znak z powrotem w int:
Zwróć uwagę, że zmieniając
RADIX
można również obsługiwać szesnastkowy (podstawa 16) i dowolną podstawę do 36 (lubCharacter.MAX_RADIX
tak zwaną).źródło
65
drukowaćA
? Ponieważ moja odpowiedź tutaj wypisuje oczekiwane zachowanie dla wymagań tego pytania. Zobacz ideone.com/09LAFRhola, cóż, przeszedłem przez ten sam problem, ale zrobiłem następujący kod.
Dzięki temu otrzymujesz wartość dziesiętną jako typ znaku. Użyłem funkcji charAt () z indeksem 0, ponieważ jedyną wartością w tym łańcuchu jest „a”, a jak wiesz, pozycja „a” w tym ciągu zaczyna się od 0.
Przepraszam, jeśli mój angielski nie jest dobrze wyjaśniony, mam nadzieję, że ci pomoże.
źródło
W ASCII każdy znak ma swój własny numer. Znak „0” to 48 dla liczb dziesiętnych, „1” to 49 i tak dalej. Więc jeśli
źródło
Nikt tutaj nie odpowiedział na prawdziwe „pytanie”: poprawnie konwertujesz int na char; w tabeli ASCII wartość dziesiętna 01 to „początek nagłówka”, znak niedrukowalny. Spróbuj wyszukać tabelę ASCII i przekonwertować wartość int między 33 a 7E; który da ci postacie do obejrzenia.
źródło
źródło
char
to jednostka kodu UTF-16. 68 jako jednostka kodu UTF-16 jest jedyną jednostką kodu potrzebną do reprezentowania punktu kodowego Unicode U + 0044 . System.out zmieni kodowanie tekstu na domyślne (przypuszczalnie pasujące do terminala / konsoli, w której działa program). println pobiera znak i próbuje go zakodować. Ponieważ znak jest pełnym kodem, może spróbować. Ponieważ U + 0044 jest postacią w prawie wszystkich zestawach znaków, powinno się udać doprowadzenie go do terminala bez załamania. Nie ma nic wspólnego z ASCII.W java char to int. Twój pierwszy fragment kodu wypisuje znak odpowiadający wartości 1 w domyślnym schemacie kodowania znaków (którym prawdopodobnie jest Unicode). Znak Unicode U + 0001 jest znakiem niedrukowalnym, dlatego nie widać żadnego wyniku.
Jeśli chcesz wydrukować znak „1”, możesz sprawdzić wartość „1” w używanym schemacie kodowania. W Unicode jest to 49 (to samo co ASCII). Ale to zadziała tylko dla cyfr 0-9.
Być może lepiej będzie, jeśli użyjesz String zamiast znaku char i używając wbudowanej
toString()
metody Java :Będzie to działać niezależnie od kodowania systemu i będzie działać dla liczb wielocyfrowych.
źródło
jeśli chcesz drukować znaki ascii na podstawie ich kodu ascii i nie chcesz wykraczać poza to (jak znaki Unicode), możesz zdefiniować swoją zmienną jako bajt, a następnie użyć konwersji (char). to znaczy:
BTW, kod ASCII dla litery „A” to 65
źródło
Upewnij się, że wartość całkowita jest wartością ASCII alfabetu / znaku.
Jeśli nie, to zrób to.
następnie dodaj do niego 64, aby stało się 65 = wartość ASCII „A”. Następnie użyj
źródło
Jeśli mówimy o typach klas, a nie o prymitywach, należy wykonać następującą sztuczkę:
źródło
mam nadzieję, że przynajmniej coś pomoże
źródło
Jeśli chcesz przekonwertować znak na odpowiadającą mu liczbę całkowitą, możesz zrobić coś takiego:
Dzieje się tak, ponieważ w ASCII istnieją elementy, których nie można normalnie wydrukować.
Na przykład liczby od 97 do 122 to liczby całkowite odpowiadające małym literom od a do z.
źródło
źródło