Перетворити інт на 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.