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

user2640480
źródło
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.

jh314
źródło
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.

Haggra
źródło
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ą).

Simon Forsberg
źródło
@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.

3ryck
źródło
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;
duża świnia
źródło
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.

apraetor
źródło
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
ajay verma
źródło
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.

david25272
źródło
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

MohS
źródło
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 
Mayur Gudi
źródło
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));
matua
źródło
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

Shivam Rai
źródło
-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.

Raul Londoño Murillo
źródło
-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);
        }
    }
}
Akash Dhotre
źródło
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