2013-08-01 7 views
75

Ниже приведен фрагмент кода,Преобразование INT обугливаться в Java

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, как в первом фрагменте, что мне делать?

+6

"* Преобразование Int в полукокса? *" Может быть, 'B = (полукокс) ('0' + a) ', но только для' 0 <= a <= 9'. – johnchen902

+4

Десятичное значение 01 является непечатаемым символом; он работает правильно. – apraetor

ответ

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

распечатает символ с значением ascii 1 (символ начала заголовка, который не может быть распечатан).

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

напечатает полукокс со значением ASCII 49 (один, соответствующий «1»)

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

Если вы хотите, чтобы преобразовать int, как в значении ascii, вы можете использовать, например, Character.toChars(48).

+2

'System.out.println ('b' + 3);' как я могу получить 'b3' вместо' 101' с помощью println? любым другим способом вместо printf? – UnKnown

+2

@UnKnown Вам нужно сделать его строкой вместо char следующим образом System.out.println («b» + 3); – Haggra

0

В java a char is a int. Ваш первый фрагмент печатает символ, соответствующий значению 1 в схеме кодирования по умолчанию (что, вероятно, является Unicode). Символ Unicode U + 0001 является непечатаемым символом, поэтому вы не видите никакого вывода.

Если вы хотите распечатать символ «1», вы можете посмотреть значение «1» в используемой схеме кодирования. В Unicode это 49 (то же, что и ASCII). Но это будет работать только для цифр 0-9.

Вы могли бы быть лучше использовать строку, а не полукокс, и с помощью Java встроенного toString() метода:

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

Это будет работать независимо от вашего кодирования системы, и будет работать для многоразрядных чисел ,

+0

Извините, но char не является int, потому что он сделан из другого количества байтов (быстрый ref. [Char-intпредставление - stackoverflow] (http://stackoverflow.com/questions/17166393/byte-char-int -в-ява-битовое представление)). Символ может быть представлен числом, вы правы, но это не целое число. – morels

+0

Кроме того, я думаю, вы можете найти вторую строку, которая должна читать «String b = Integer.toString (a);» – Faulty

+0

Тип данных char хорошо определен в [java.lang.Character] (https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html), а также его связи с int и юникодными кодовыми точками и кодовыми единицами. – Ian

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

hola, хорошо, я прошел через ту же проблему, но то, что я сделал, было следующим кодом.

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

С этим вы получаете десятичное значение в виде символа. Я использовал charAt() с индексом 0, потому что единственное значение в этой строке - «a», и, как вы знаете, позиция «a» в этой строке начинается с 0.

Извините, если мой английский не очень хорошо объяснен , надеюсь, это поможет вам.

27

Мой ответ подобен ответу jh314, но я объясню немного глубже.

Что вы должны делать в этом случае:

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

Здесь мы использовали «0», потому что символы фактически представлены значениями ASCII. '0' - символ и представлен значением 48.

Мы набрали (a + '0'), и для того, чтобы добавить их, Java преобразует '0' в значение ASCII, которое равно 48, а a равно 1, поэтому сумма равна 49. Затем мы сделали следующее:

(char)(49) 

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

25

Похоже, вы ищете Character.forDigit метод:

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

Существует также метод, который может конвертировать из полукокса обратно в междунар:

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

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

+0

@ProgrammingNub Определите значение «int». Не хотите ли вы распечатать цифру 4? Или вы хотите напечатать значение Ascii для int, так что '65' печатает' A'? Потому что мой ответ здесь отображает ожидаемое поведение для требований этого вопроса. См. Https://ideone.com/09LAFR –

1

Здесь никто не ответил на настоящий «вопрос»: вы преобразовываете int в char правильно; в таблице ASCII десятичное значение 01 является «началом заголовка», непечатаемым символом. Попробуйте найти таблицу ASCII и преобразовать значение int между 33 и 7E; который даст вам персонажей, на которые нужно смотреть.

-2

Если вы хотите, чтобы преобразовать символ в соответствующем целое число, вы можете сделать что-то вроде этого:

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

Это происходит потому, что в ASCII есть некоторые элементы, которые не могут быть напечатаны в обычном режиме.

Например, цифры с 97 по 122 являются целыми числами, соответствующими строчным буквам от a до z.

+2

извините, но вы просто скопировали старые ответы ... – Miki

0

Всякий раз, когда вы вводите произнесения целое число обугливается будет возвращать значение ASCii этого междунар (один раз пройти через стол ASCii для лучшего понимания)

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

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

    //output- D 
+0

Сорт .... 'char' - это кодовый блок UTF-16. 68 как кодовый блок UTF-16 является единственным блоком кода, необходимым для представления кодека Unicode [U + 0044] (http://www.fileformat.info/info/unicode/char/0044/index.htm). System.out изменит кодировку текста на кодировку по умолчанию (предположительно, соответствующую терминалу/консоли, в которой запущена программа). println принимает символ и пытается его кодировать. Поскольку char является полным кодом, он может попробовать. Так как U + 0044 является символом почти всех наборов символов, должен быть успех в том, чтобы довести его до конечного гангстера. Ничего общего с ASCII. –

0

, если вы хотите напечатать ASCII символы, основанные на их ascii-коде и не хотят выходить за рамки этого (например, символы юникода), вы можете определить свою переменную как байт, а затем использовать (char) convert. то есть:

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

BTW, код ASCII для буквы «А» 65

1

Если мы говорим о типах классов - не примитивов, следующий трюк должен сделать:

Integer someInt; 
Character someChar; 

someChar = (char)Integer.parseInt(String.valueOf(someInt); 
0
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

Просьба предоставить объяснение вместо просто дампа кода. –

+0

Хотя этот пост только для кода может ответить на вопрос, пожалуйста, добавьте объяснение, почему оно это делает. Это поможет будущим пользователям оценить ответ на их ситуацию. –

0

Убедитесь, что целочисленное значение является значением ASCII символа/символа.

Если нет, то сделайте это.

for e.g. if int i=1 

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

char x = (char)i; 

print x 

// 'A' will be printed 
Смежные вопросы