Подтвердить что ты не робот

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

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

char foo = '2';

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

Кто-нибудь подумал об использовании 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
}

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

Ответ 4

char c = '1';
int i = (int)(c-'0');

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

static int ToInt(this char c)
{
    return (int)(c - '0');
}

Ответ 5

Попробуйте это

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

int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9

Ответ 6

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

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

Несмотря на то, что числовые значения ниже одинаковы для цифр и основных латинских символов.

Ответ 7

Это преобразует в целое число и обрабатывает unicode

CharUnicodeInfo.GetDecimalDigitValue('2')

Вы можете прочитать здесь.

Ответ 8

Принцип:

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,...)

Использование:

public static int CharToInt(char c)
{
    return 0b0000_1111 & (byte) c;
}

Ответ 9

Настоящий путь это:

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

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

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

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

Ответ 10

Я использую Compact Framework 3.5, а не метод "char.Parse". Я думаю, что не плохо использовать класс Convert. (См. CLR через С#, Джеффри Рихтер)

char letterA = Convert.ToChar(65);
Console.WriteLine(letterA);
letterA = 'あ';
ushort valueA = Convert.ToUInt16(letterA);
Console.WriteLine(valueA);
char japaneseA = Convert.ToChar(valueA);
Console.WriteLine(japaneseA);

Работает с символами ASCII или Unicode

Ответ 11

Сравнение некоторых методов, основанных на результате, когда символ не является цифрой ASCII:

char c = '\n';                              
Debug.Print($"{c & 15}");                   // 10
Debug.Print($"{c ^ 48}");                   // 58
Debug.Print($"{c - 48}");                   // -38
Debug.Print($"{(uint)c - 48}");             // 4294967258
Debug.Print($"{char.GetNumericValue(c)}");  // -1 

Ответ 12

Я согласен с @Chad Grant

Также верно, если вы преобразуете в строку, то вы можете использовать это значение как числовое, как сказано в вопросе

int bar = Convert.ToInt32(new string(foo, 1)); // => gives bar=2

Я попытался создать более простой и понятный пример

char v = '1';
int vv = (int)char.GetNumericValue(v); 

char.GetNumericValue(v) возвращается как double и конвертируется в (int)

Более Advenced использование в качестве массива

int[] values = "41234".ToArray().Select(c=> (int)char.GetNumericValue(c)).ToArray();

Ответ 13

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

Для ex: -

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

Ответ 14

Это сработало для меня:

int bar = int.Parse("" + foo);