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

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

char foo = '2';

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

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

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

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

108 голосов | спросил KeithA 27 +03002008-10-27T07:49:21+03:00312008bEurope/MoscowMon, 27 Oct 2008 07:49:21 +0300 2008, 07:49:21

11 ответов


0

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

  

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

http://msdn.microsoft.com/en-us/библиотека /system.char.aspx

ответил Chad Grant 28 AMpTue, 28 Apr 2009 06:20:19 +040020Tuesday 2009, 06:20:19
0

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

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

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

ответил Jeremy Ruten 27 +03002008-10-27T07:51:26+03:00312008bEurope/MoscowMon, 27 Oct 2008 07:51:26 +0300 2008, 07:51:26
0

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

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

ответил faulty 27 +03002008-10-27T08:39:56+03:00312008bEurope/MoscowMon, 27 Oct 2008 08:39:56 +0300 2008, 08:39:56
0
char c = '1';
int i = (int)(c-'0');

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

static int ToInt(this char c)
{
    return (int)(c - '0');
}
ответил sontek 27 +03002008-10-27T07:52:06+03:00312008bEurope/MoscowMon, 27 Oct 2008 07:52:06 +0300 2008, 07:52:06
0

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

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

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

ответил Nikolay 26 +04002012-10-26T10:59:21+04:00312012bEurope/MoscowFri, 26 Oct 2012 10:59:21 +0400 2012, 10:59:21
0

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

  

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

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

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

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

ответил Normantas Stankevičius 12 PMpThu, 12 Apr 2018 21:08:21 +030008Thursday 2018, 21:08:21
0

Принцип:

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;
}
ответил Tomer Wolberg 26 TueEurope/Moscow2017-12-26T11:36:05+03:00Europe/Moscow12bEurope/MoscowTue, 26 Dec 2017 11:36:05 +0300 2017, 11:36:05
0

Сравнение некоторых методов на основе результата, когда символ не является цифрой 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 
ответил Slai 15 Jam1000000amSun, 15 Jan 2017 00:54:30 +030017 2017, 00:54:30
0

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

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

ответил antonio 13 AM00000090000005231 2015, 09:42:52
0

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

Например: -

int s;
char i= '2';
s = (int) i;
ответил Learner 29 Maypm17 2017, 21:22:34
0

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

int bar = int.Parse("" + foo);
ответил Renán Díaz 26 AM00000060000002931 2013, 06:07:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132