Ниже приведен фрагмент кода,
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, как в первом фрагменте, что мне делать?
b = (char)('0' + a)
но только для0 <= a <= 9
.Ответы:
распечатает символ со значением ascii 1 (символ начала заголовка, который нельзя распечатать).
распечатает символ со значением ascii 49 (соответствует '1')
Если вы хотите преобразовать цифру (0-9), вы можете добавить к ней 48 и преобразовать или что-то в этом роде
Character.forDigit(a, 10);
.Если вы хотите преобразовать
int
as в значение ascii, вы можете использовать,Character.toChars(48)
например,.источник
System.out.println('b'+3);
как я могуb3
вместо этого101
использовать println? любым другим способом вместо printf?Character.toChars
работает с кодовыми точками Unicode, а не со значениями ASCII. Вы получите то же самое (только для BMP), если просто приведете int к char.Мой ответ похож на ответ jh314, но я объясню немного глубже.
Что вам следует делать в этом случае:
Здесь мы использовали «0», потому что символы фактически представлены значениями ASCII. '0' является символом и представлен значением 48.
Мы набрали
(a + '0')
и, чтобы сложить их, Java преобразовала «0» в свое значение ASCII, равное 48, а a - 1, поэтому сумма равна 49. Затем мы сделали следующее:Мы забросили
int
вchar
. Эквивалент 49 в кодировке ASCII равен «1». Таким образом вы можете преобразовать любую цифру в char, и это умнее и лучше, чем использование.toString()
метода с последующим вычитанием цифры по.charAt()
методу.источник
Похоже, вы ищете
Character.forDigit
метод:Также существует метод, который может преобразовать из char обратно в int:
Обратите внимание, что, изменив,
RADIX
вы также можете поддерживать шестнадцатеричную систему счисления (система счисления 16) и любую систему счисления до 36 (илиCharacter.MAX_RADIX
как ее еще называют).источник
65
печаталосьA
? Потому что мой ответ здесь печатает ожидаемое поведение для требований этого вопроса. См. Ideone.com/09LAFRПривет, я столкнулся с той же проблемой, но я сделал следующий код.
При этом вы получаете десятичное значение как тип char. Я использовал charAt () с индексом 0, потому что единственное значение в этой строке - это 'a', и, как вы знаете, позиция 'a' в этой строке начинается с 0.
Извините, если мой английский плохо объяснил, надеюсь, это вам поможет.
источник
В ASCII у каждого символа есть свой номер. И char '0' - это 48 для десятичной дроби, '1' - это 49, и так далее. Так что если
источник
Никто не ответил на настоящий "вопрос" здесь: вы правильно конвертируете int в char; в таблице ASCII десятичное значение 01 - это «начало заголовка», непечатаемый символ. Попробуйте найти таблицу ASCII и преобразовать значение типа int между 33 и 7E; это даст вам взглянуть на персонажей.
источник
источник
char
- это кодовая единица UTF-16. 68 как кодовая единица UTF-16 - единственная кодовая единица, необходимая для представления кодовой точки Unicode U + 0044 . System.out изменит кодировку текста на кодировку по умолчанию (предположительно, соответствующую терминалу / консоли, в которой работает программа). println берет символ и пытается его закодировать. Поскольку char - это полный код, можно попробовать. Так как U + 0044 - это символ почти во всех наборах символов, он должен быть успешно доставлен на терминал без искажений. Ничего общего с ASCII.В java char - это int. Ваш первый фрагмент печатает символ, соответствующий значению 1 в схеме кодировки символов по умолчанию (которая, вероятно, является Unicode). Символ Unicode U + 0001 - непечатаемый символ, поэтому вы не видите никакого вывода.
Если вы хотите распечатать символ «1», вы можете найти значение «1» в схеме кодирования, которую вы используете. В Unicode это 49 (то же, что и ASCII). Но это будет работать только для цифр 0-9.
Возможно, вам лучше использовать String, а не char, и использовать встроенный
toString()
метод Java :Это будет работать независимо от кодировки вашей системы и будет работать для многозначных чисел.
источник
если вы хотите печатать символы ascii на основе их кода ascii и не хотите выходить за рамки этого (например, символы Unicode), вы можете определить свою переменную как байт, а затем использовать преобразование (char). то есть:
Кстати, код ascii для буквы A - 65
источник
Убедитесь, что целочисленное значение является значением ASCII алфавита / символа.
Если нет, то сделай это.
затем добавьте к нему 64, чтобы получилось 65 = значение ASCII 'A'. Затем используйте
источник
Если мы говорим о типах классов, а не о примитивах, необходимо проделать следующий трюк:
источник
надеюсь, это хоть чем-то поможет
источник
Если вы хотите преобразовать символ в соответствующее ему целое число, вы можете сделать что-то вроде этого:
Это происходит потому, что в ASCII есть некоторые элементы, которые нельзя распечатать нормально.
Например, числа от 97 до 122 - это целые числа, соответствующие строчным буквам от a до z.
источник
источник