Konwertuj int na char w java


124

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ć?


9
„ Zamień liczbę int na znak? ” Może, b = (char)('0' + a)ale tylko dla 0 <= a <= 9.
— johnchen902

6
Wartość dziesiętna 01 to znak niedrukowalny; działa poprawnie.
— apraetor

Odpowiedzi:


110
int a = 1;
char b = (char) a;
System.out.println(b);

wypisze znak z wartością ascii 1 (znak początku nagłówka, którego nie można wydrukować).

int a = '1';
char b = (char) a;
System.out.println(b);

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ć intwartość ascii, możesz użyć Character.toChars(48)na przykład.


2
System.out.println('b'+3);jak mogę b3zamiast tego 101skorzystać z println? jakikolwiek inny sposób zamiast printf?
— Asif Mushtaq

2
@UnKnown Musisz uczynić z niego ciąg znaków zamiast znaku w następujący sposób System.out.println ("b" + 3);
— Haggra

Character.toCharsdział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.
— slabynespase

55

Moja odpowiedź jest podobna do odpowiedzi jh314, ale wyjaśnię trochę głębiej.

W takim przypadku powinieneś zrobić:

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

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:

(char)(49)

Zarzuciliśmy intdo char. 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.


42

Wygląda na to, że szukasz Character.forDigitmetody:

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

Istnieje również metoda, która może przekształcić znak z powrotem w int:

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

Zwróć uwagę, że zmieniając RADIXmożna również obsługiwać szesnastkowy (podstawa 16) i dowolną podstawę do 36 (lub Character.MAX_RADIXtak zwaną).


@ProgrammingNub Zdefiniuj „wartość int”. Nie chcesz, aby drukowała cyfrę 4? A może chciałbyś wydrukować wartość Ascii int, tak aby 65drukować A? Ponieważ moja odpowiedź tutaj wypisuje oczekiwane zachowanie dla wymagań tego pytania. Zobacz ideone.com/09LAFR
— Simon Forsberg

10
int a = 1;
char b = (char) a;
System.out.println(b);

hola, cóż, przeszedłem przez ten sam problem, ale zrobiłem następujący kod.

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

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.


3
int a = 1;
char b = (char) (a + 48);

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

char b = '2';
int a = b = 50;

1

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.


1

Za każdym razem, gdy wpiszesz cast integer do char, zwróci wartość ascii tego int (po przejściu przez tabelę ascii dla lepszego zrozumienia)

    int a=68;
    char b=(char)a;

    System.out.println(b);//it will return ascii value of 68

    //output- D

2
Rodzaj .... charto 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.
— Tom Blodget

0

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 :

int a = 1;
String b = toString(a);
System.out.println(b);

Będzie to działać niezależnie od kodowania systemu i będzie działać dla liczb wielocyfrowych.


1
Przepraszamy, ale znak nie jest intem, ponieważ składa się z innej liczby bajtów (szybkie odniesienie do reprezentacji char-int - stackoverflow ). Znak może być reprezentowany przez liczbę, masz rację, ale nie jest to liczba całkowita.
— smardze

Myślę też, że druga linia powinna brzmieć „String b = Integer.toString (a);”
— Wadliwy

Typ danych char jest dobrze zdefiniowany w java.lang.Character, jak również jego związek z punktami kodowymi int i Unicode oraz jednostkami kodu.
— Ian

0

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:

public static void main(String[] args) {
    byte b = 65;
    for (byte i=b; i<=b+25; i++) {
        System.out.print((char)i + ", ");
    }

BTW, kod ASCII dla litery „A” to 65


0

Upewnij się, że wartość całkowita jest wartością ASCII alfabetu / znaku.

Jeśli nie, to zrób to.

for e.g. if int i=1

następnie dodaj do niego 64, aby stało się 65 = wartość ASCII „A”. Następnie użyj

char x = (char)i;

print x

// 'A' will be printed 

0

Jeśli mówimy o typach klas, a nie o prymitywach, należy wykonać następującą sztuczkę:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));

Nie ma potrzeby, aby był to łańcuch w trakcie, a liczba parantezy jest niedopasowana.
— Simon Forsberg

Simon, „nawiasy”. Doradzić, jak w takim razie?
— matua

-1

spójrz na poniższy program, aby uzyskać pełną koncepcję konwersji

class typetest{
    public static void main(String args[]){
        byte a=1,b=2;
        char c=1,d='b';
        short e=3,f=4;
        int g=5,h=6;
        float i;
        double k=10.34,l=12.45;
        System.out.println("value of char variable c="+c);
        // if we assign an integer value in char cariable it's possible as above
        // but it's not possible to assign int value from an int variable in char variable 
        // (d=g assignment gives error as incompatible type conversion)
        g=b;
        System.out.println("char to int conversion is possible");
        k=g;
        System.out.println("int to double conversion is possible");
        i=h;
        System.out.println("int to float is possible and value of i = "+i);
        l=i;
        System.out.println("float to double is possible");
    }
}

mam nadzieję, że przynajmniej coś pomoże


-2

Jeśli chcesz przekonwertować znak na odpowiadającą mu liczbę całkowitą, możesz zrobić coś takiego:

int a = (int) 'a';
char b = (char) a;
System.out.println(b);

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.


-2
public class String_Store_In_Array 
{
    public static void main(String[] args) 
    {
        System.out.println(" Q.37 Can you store string in array of integers. Try it.");

        String str="I am Akash";
        int arr[]=new int[str.length()];
        char chArr[]=str.toCharArray();
          char  ch;
        for(int i=0;i<str.length();i++)
        {

            arr[i]=chArr[i];
        }
        System.out.println("\nI have stored it in array by using ASCII value");
        for(int i=0;i<arr.length;i++)
        {

            System.out.print(" "+arr[i]);
        }
        System.out.println("\nI have stored it in array by using ASCII value to original content");
        for(int i=0;i<arr.length;i++)
        {
             ch=(char)arr[i];

            System.out.print(" "+ch);
        }
    }
}

2
Podaj wyjaśnienie zamiast tylko zrzutu kodu.
— Jules Dupont

Chociaż ten post zawierający tylko kod może odpowiedzieć na pytanie, dodaj wyjaśnienie, dlaczego tak się dzieje. Pomoże to przyszłym użytkownikom ocenić odpowiedź na ich sytuację.
— Tom Brunberg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.