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

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

char foo = '2';

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

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

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

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

вопрос задан 27.10.2008
KeithA
695 репутация

13 ответов


  • 109 рейтинг

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

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

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

    ответ дан Jeremy Ruten, с репутацией 120379, 27.10.2008
  • 99 рейтинг

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

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

    http: // msdn. Microsoft. ком / EN-US / библиотека / система. голец. aspx

    ответ дан Chad Grant, с репутацией 32221, 28.04.2009
  • 61 рейтинг

    Кто-нибудь рассматривал возможность использования 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, с репутацией 4476, 27.10.2008
  • 24 рейтинг
    char c = '1';
    int i = (int)(c-'0');
    

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

    static int ToInt(this char c)
    {
        return (int)(c - '0');
    }
    
    ответ дан sontek, с репутацией 7074, 27.10.2008