Преобразование char в int в C#
у меня есть символ в C#:
char foo = '2';
теперь я хочу получить 2 в int. Я нахожу это обращение.ToInt32 возвращает фактическое десятичное значение символа, а не число 2. Будет работать следующее:
int bar = Convert.ToInt32(new string(foo, 1));
int.parse работает только со строками.
нет ли собственной функции в C#, чтобы перейти от символа к int, не делая его строкой? Я знаю, что это тривиально, но кажется странным, что нет ничего родного, чтобы напрямую сделать преобразование.
13 ответов
интересные ответы, но документы говорят по-другому:
использовать
GetNumericValue
методы преобразоватьChar
объект, который представляет число для типа числового значения. ИспользоватьParse
иTryParse
для преобразования a символ в строке вChar
объект. ИспользоватьToString
преобразованиеChar
объекта
это преобразует его в int:
char foo = '2';
int bar = foo - '0';
это работает, потому что каждый символ внутренне представлен числом. Символы от " 0 " до " 9 "представлены последовательными числами, поэтому поиск разницы между символами" 0 " и " 2 " приводит к числу 2.
кто-нибудь рассматривал возможность использования 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
}
это намного безопаснее и менее подвержен ошибкам
char c = '1';
int i = (int)(c-'0');
и вы можете создать статический метод из этого:
static int ToInt(this char c)
{
return (int)(c - '0');
}
по умолчанию вы используете UNICODE, поэтому я предлагаю использовать метод faulty
int bar = int.Parse(foo.ToString());
даже если числовые значения под одинаковы для цифр и основных латинских символов.
это преобразуется в целое число и обрабатывает unicode
CharUnicodeInfo.GetDecimalDigitValue('2')
вы можете подробнее здесь.
char foo = '2';
int bar = foo & 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,... )
реальный способ является:
int theNameOfYourInt = (int).Пеструшка.GetNumericValue (theNameOfYourChar);
"theNameOfYourInt" - int, в который вы хотите преобразовать свой символ.
"theNameOfYourChar" - символ, который вы хотите использовать, чтобы он был преобразован в int.
оставьте все остальное.
сравнение некоторых методов на основе результата, когда символ не является цифрой 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
Я использую Compact Framework 3.5, и не имеет " char.Метод "разбора". Я думаю, неплохо использовать класс Convert. (См. CLR via C#, Jeffrey Richter)
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 char или Unicode char
Я видел много ответов, но они, кажется, путаешь меня. Мы не можем просто использовать приведение типов.
например:-
int s;
char i= '2';
s = (int) i;