Преобразование из char в int: почему (int) GivenString.charAt (2) дают 48 с GivenString = "11001"? - PullRequest
0 голосов
/ 16 декабря 2018

Вот моя проблема: я хотел преобразовать char в int из строки, используя следующий код:

String s = "11001";
int charAt2 = (int)s.charAt(2); //Why this gives 48 ???
System.out.println("charAt2 = "+charAtI);

Я попал на терминал: 48. Почему?Это то, что я хотел бы понять.

Я уже нашел отличное решение для моей проблемы с переполнением стека благодаря ссылке dasblinkenlight преобразования типов .Как я думаю, это может быть полезно для кого-то еще, вот исправленная версия, которая отлично работает.Я использую метод Character.digit( char c, int i), который дает int от char c в основании i, чтобы сделать преобразование.

String s = "11001";
int charAt2 = Character.digit(s.charAt(2), 2); //radix 2 here
System.out.println("charAt2 = "+charAt2);

На терминале: 0. Это работает.

Ответы [ 4 ]

0 голосов
/ 16 декабря 2018
String s = "11001";
int charAt2 = Integer.valueOf(""+s.charAt(2));
System.out.println("charAt2 = "+charAt2);

возможный способ сделать это.valueOf преобразует строку в int, "" + aChar - это быстрый и грязный способ преобразования символа в строку

0 голосов
/ 16 декабря 2018

A char - это просто меньшее int с причудливой печатью.Когда вы конвертируете его в int, вы теряете эту причудливую печать и просто печатаете значение Unicode символа.Значение Юникода , символ 0 - 48.

0 голосов
/ 16 декабря 2018

Когда вы анализируете char в int, вы получаете индекс char в ASCII-таблице .

Цифры начинаются с 0 с индекса 48, которыйпочему (int)'0' возвращает 48. Поскольку индексы для чисел увеличиваются пропорционально числам, вы можете использовать

int charAt2 = (int)s.charAt(2) - 48;
0 голосов
/ 16 декабря 2018

s.charAt(2) даст вам '0', символ 0, НЕ число 0. код символа ascii из '0' равен 48.

...