Перетворити інт на char в Java


124

Нижче наведено фрагмент коду,

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

Але я отримую порожній вихід.

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

Я отримаю 1 як свій вихід.

Хтось може це пояснити? І якщо я хочу перетворити int в char, як у першому фрагменті, що мені робити?


9
" Перетворити інт на char? " Можливо, b = (char)('0' + a)але лише для 0 <= a <= 9.
johnchen902

6
Десяткове значення 01 - недрукарський символ; це працює належним чином.
apraetor

Відповіді:


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

виведе char із значенням ascii 1 (char-start-of-char, який не можна друкувати).

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

роздрукує діаграму зі значенням ascii 49 (одна відповідає "1")

Якщо ви хочете перетворити цифру (0-9), ви можете додати до неї 48 і віддати чи щось подібне Character.forDigit(a, 10);.

Якщо ви хочете перетворити значення intas в ascii, ви можете використовувати, Character.toChars(48)наприклад.


2
System.out.println('b'+3);як я можу отримати b3замість цього, 101використовуючи println? будь-який інший спосіб замість printf?
Асиф Муштак

2
@UnK Pozna Вам потрібно зробити його рядком замість char, як слід System.out.println ("b" + 3);
Хаггра

Character.toCharsпрацює на кодових точках Unicode, а не на значеннях ASCII. Ви отримуєте те саме (лише для BMP), якщо ви просто додали до символу char.
слабенькапаза

55

Моя відповідь схожа на відповідь jh314, але я поясню трохи глибше.

Що ви повинні зробити в цьому випадку:

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

Тут ми використовували "0", тому що символи фактично представлені значеннями ASCII. '0' є знаком і представлений значенням 48.

Ми набрали (a + '0')і для того, щоб додати їх, Java перетворила «0» на своє значення ASCII, що становить 48, а - 1, тож сума становить 49. Тоді, що ми зробили:

(char)(49)

Ми відлили intв char. Еквівалент ASCII 49 дорівнює «1». Ви можете перетворити будь-яку цифру в символу таким чином і розумніший і кращий спосіб, ніж використовувати .toString()метод, а потім відняти цифру за .charAt()методом.


42

Схоже, ви шукаєте Character.forDigitметод:

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

Існує також метод, який може конвертувати з char назад в int:

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

Зауважте, що зміною RADIXви можете також підтримувати шістнадцятковий (радіакс 16) та будь-який радіус до 36 (або Character.MAX_RADIXяк це також відомо).


@ProgrammingNub Визначте "значення int". . Не хочете, щоб він надрукував цифру 4? Або ви хочете , щоб надрукувати ASCII-значення міжнар, так що 65відбитки A? Оскільки моя відповідь тут друкує очікувану поведінку для вимог цього питання. Дивіться ideone.com/09LAFR
Саймон Форсберг

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

Хола, добре, я пережив ту ж проблему, але я зробив наступний код.

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

За допомогою цього ви отримуєте десяткове значення як тип знака. Я використав charAt () з індексом 0, тому що єдине значення в цій строці - "a", і, як ви знаєте, позиція "a" у цій рядку починається з 0.

Вибачте, якщо моя англійська мова не пояснена, сподіваюся, що це допоможе вам.


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

В ASCII кожен знак має свій номер. А char '0' - це 48 для десятків, '1' - 49 тощо. Так що якщо

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

1

Тут ніхто не відповів на справжнє "запитання": ви перетворюєте int в char правильно; у таблиці ASCII десяткове значення 01 - "початок заголовка", недрукарський символ. Спробуйте знайти таблицю ASCII і перетворити значення int між 33 і 7E; це дасть вам ознайомитись із персонажами.


1

Кожен раз, коли ви введете команду cast integer для char, вона поверне значення ascii цього int (раз перейдіть через таблицю ascii для кращого розуміння)

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

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

    //output- D

2
Сорт .... charє кодовою одиницею UTF-16. 68 як блок коду UTF-16 є єдиним блоком коду, необхідним для представлення кодової точки Unicode U + 0044 . System.out змінить кодування тексту на кодування за замовчуванням (імовірно, відповідає терміналу / консолі, в якій працює програма). println приймає знак та намагається його кодувати. Оскільки char є повною кодовою точкою, вона може спробувати. Оскільки U + 0044 є символом майже у всіх наборах символів, слід отримати успіх у тому, щоб довести його до терміналу без розпізнавання. Нічого спільного з ASCII.
Том Блоджет

0

У яві чару є int. Ваш перший фрагмент виводить символ, що відповідає значенню 1, у схемі кодування символів за замовчуванням (що, мабуть, Unicode). Символ Unicode U + 0001 є недрукувальним символом, тому ви не бачите жодного виводу.

Якщо ви хочете роздрукувати символ "1", ви можете знайти значення "1" у використаній схемі кодування. У Unicode це 49 (те саме, що і ASCII). Але це спрацює лише для цифр 0-9.

Можливо, вам буде краще використовувати String, а не char, та використовуючи вбудований toString()метод Java :

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

Це працюватиме незалежно від кодування вашої системи та працюватиме для багатоцифрових чисел.


1
Вибачте, але char не є int, оскільки він складається з різної кількості байтів (швидке посилання char-int подання - stackoverflow ). Значок може бути представлений числом, ви праві, але це не ціле число.
морс

Крім того, я думаю, що ви можете знайти другий рядок, який повинен читати "String b = Integer.toString (a);"
Несправний

Тип даних char чітко визначений у java.lang.Character , а також його відношення до точок коду int та unicode та одиниць коду.
Ян

0

якщо ви хочете надрукувати символи ascii на основі коду ascii і не хочете виходити за рамки цього (як символи unicode), ви можете визначити свою змінну як байт, а потім скористатися (char) перетворенням. тобто:

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

До речі, код асції для літери "А" дорівнює 65


0

Переконайтесь, що ціле значення - значення ASCII алфавіту / символу.

Якщо ні, то зробіть це.

for e.g. if int i=1

потім додайте до нього 64, щоб воно стало 65 = значення ASCII 'A', а потім використовуйте

char x = (char)i;

print x

// 'A' will be printed 

0

Якщо ми говоримо про типи класів - а не про примітиви, потрібно зробити наступний трюк:

Integer someInt;
Character someChar;

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

Не потрібно робити це рядком у процесі, і у вас є невідповідність кількості парантезів.
Саймон Форсберг

Саймон, «круглі дужки». Порадьте, як тоді?
matua

-1

дивіться наступну програму для повної концепції перетворення

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");
    }
}

сподіваюся, це допоможе хоч щось


-2

Якщо ви хочете перетворити символ у відповідне ціле число, ви можете зробити щось подібне:

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

Це відбувається тому, що в ASCII є деякі елементи, які неможливо нормально надрукувати.

Наприклад, числа 97 - 122 - цілі числа, відповідні малі літери a до 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
Будь ласка, надайте пояснення, а не просто скидання коду.
Жуль Дюпонт

Хоча ця публікація лише для коду може відповісти на запитання, будь ласка, додайте пояснення, чому це робиться. Це допоможе майбутнім користувачам оцінити відповідь на свою ситуацію.
Том Брунберг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.