Как преобразовать char в int?
Каков правильный способ преобразования char
в int
? Это дает 49
:
int val = Convert.ToInt32('1'); //int val = Int32.Parse("1"); // Works
Я не хочу конвертировать в строку и затем анализировать ее.
- Каков тип нулевого литерала?
- Почему размер стека в C # равен 1 МБ?
- Использовать «переход» в коммутаторе?
- Как эта побитовая операция проверяет мощность 2?
- Перенаправление stdin и stdout из C
- Как настроить тайм-аут подключения сокетов
- malloc () против HeapAlloc ()
- Математическая цепочка оператора сравнения - как и в случае, если ((5 <j <= 1)) "
- Правильный способ связи WSSE Usernametoken для SOAP webservice
- Проверить хорошо сформированный XML без try / catch?
- не могут вызвать защищенные функции базового classа?
- 1/252 = 0 в c #?
- Когда следует использовать mmap для доступа к файлу?
Я удивлен, что никто не упомянул статический метод, встроенный прямо в System.Char
…
int val = (int)Char.GetNumericValue('8'); // val == 8
как насчет (для char c
)
int i = (int)(c - '0');
который делает вычитание значения char?
Возникает вопрос API (комментарии), возможно, метод расширения?
public static class CharExtensions { public static int ParseInt32(this char value) { int i = (int)(value - '0'); if (i < 0 || i > 9) throw new ArgumentOutOfRangeException("value"); return i; } }
затем используйте int x = c.ParseInt32();
То, что все пугают, объясняет, почему это происходит.
Char, в основном целое число, но с указателем в таблице ASCII. Все символы имеют соответствующее целочисленное значение, как вы можете видеть при попытке его parsingа.
У Pranay явно есть другой набор символов, поэтому HIS-код не работает. единственный способ
int val = '1' - '0';
потому что это ищет целочисленное значение в таблице '0'
которое затем «базовое значение», вычитающее ваш номер в формате char из этого, даст вам исходный номер.
int i = (int)char.GetNumericValue(c);
Еще один вариант:
int i = c & 0x0f;
Это должно также выполнить это.
int val = '1' - '0';
Это можно сделать с помощью ascii-кодов, где «0» является самым низким, а числовые символы подсчитываются оттуда
int val = '1' - 48;
Вы можете использовать следующий метод расширения:
public static class CharExtensions { public static int CharToInt(this char c) { if (c < '0' || c > '9') throw new ArgumentException("The character should be a number", "c"); return c - '0'; } }
Самый безопасный способ для этого – использовать метод Int32.TryParse. См. Здесь: http://dotnetperls.com/int-tryparse
Расширение некоторых других ответов, которые охватывают шестнадцатеричное представление:
public int CharToInt(char c) { if (c >= '0' && c <= '9') { return c - '0'; } else if (c >= 'a' && c <= 'f') { return 10 + c - 'a'; } else if (c >= 'A' && c <= 'F') { return 10 + c - 'A'; } return -1; }
Вы можете попробовать что-то вроде этого:
int val = Convert.ToInt32("" + '1');
int val = '1' & 15;
Бинарный код ASCII charecters 0-9:
0 – 00110000
1 – 00110001
2 – 00110010
3 – 00110011
4 – 00110100
5 – 00110101
6 – 00110110
7 – 00110111
8 – 00111000
9 – 00111001
и если вы берете в каждом из них первые 4 LSB (используя побитовое И с 8’b00001111, что равно 15), вы получаете фактическое число (0000 = 0,0001 = 1,0010 = 2, …)