Конвертировать char в int в C # - PullRequest
       65

Конвертировать char в int в C #

118 голосов
/ 27 октября 2008

У меня есть символ в c #:

char foo = '2';

Теперь я хочу получить 2 в int. Я считаю, что Convert.ToInt32 возвращает фактическое десятичное значение символа, а не число 2. Следующее будет работать:

int bar = Convert.ToInt32(new string(foo, 1));

int.parse работает только со строками.

Нет ли в C # встроенной функции для перехода от символа к int, не превращая его в строку? Я знаю, что это тривиально, но кажется странным, что нет ничего нативного для прямого преобразования.

Ответы [ 13 ]

132 голосов
/ 27 октября 2008

Это преобразует его в int:

char foo = '2';
int bar = foo - '0';

Это работает, потому что каждый символ внутренне представлен числом. Символы от «0» до «9» представлены последовательными числами, поэтому нахождение разницы между символами «0» и «2» приводит к числу 2.

114 голосов
/ 28 апреля 2009

Интересные ответы, но документы говорят по-другому:

Используйте GetNumericValue методы для преобразовать Char объект, который представляет число в числовой тип значения. использование Parse и TryParse для преобразования символ в строке в Char объект. Используйте ToString для преобразования Char объект для String объекта.

http://msdn.microsoft.com/en-us/library/system.char.aspx

67 голосов
/ 27 октября 2008

Кто-нибудь рассматривал возможность использования int.Parse() и int.TryParse() как этот

int bar = int.Parse(foo.ToString());

Еще лучше, как это

int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
    //Do something to correct the problem
}

Это намного безопаснее и менее подвержено ошибкам

26 голосов
/ 27 октября 2008
char c = '1';
int i = (int)(c-'0');

и вы можете создать из него статический метод:

static int ToInt(this char c)
{
    return (int)(c - '0');
}
8 голосов
/ 30 декабря 2011

Попробуйте

char x = '9'; // '9' = ASCII 57

int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9
7 голосов
/ 26 октября 2012

По умолчанию вы используете UNICODE, поэтому я предлагаю использовать ошибочный метод

int bar = int.Parse(foo.ToString());

Даже если числовые значения одинаковы для цифр и основных латинских букв.

3 голосов
/ 18 апреля 2015

Преобразует в целое число и обрабатывает Unicode

CharUnicodeInfo.GetDecimalDigitValue('2')

Вы можете узнать больше здесь .

1 голос
/ 12 апреля 2018

Реальный путь:

int theNameOfYourInt = (int) .Char.GetNumericValue (theNameOfYourChar);

"theNameOfYourInt" - int, в который вы хотите преобразовать свой символ.

"theNameOfYourChar" - Char, который вы хотите использовать, чтобы он был преобразован в int.

Оставь все остальное.

1 голос
/ 26 декабря 2017

Принцип:

char foo = '2';
int bar = foo & 15;

Двоичный код символов ASCII 0-9:

0   -   0011 0000
1   -   0011 0001
2   -   0011 0010
3   -   0011 0011
4   -   0011 0100
5   -   0011 0101
6   -   0011 0110
7   -   0011 0111
8   -   0011 1000
9   -   0011 1001

и если вы возьмете в каждом из них первые 4 младших бита (используя побитовое И с 8'b00001111, равным 15), вы получите фактическое число (0000 = 0,0001 = 1,0010 = 2, ... )

Usage:

public static int CharToInt(char c)
{
    return 0b0000_1111 & (byte) c;
}
0 голосов
/ 29 мая 2017

Я видел много ответов, но они кажутся мне запутанными. Разве мы не можем просто использовать Type Casting.

Например: -

int s;
char i= '2';
s = (int) i;
...