如何将char转换为int?
将char
转换为int
的正确方法是什么? 这给了49
:
int val = Convert.ToInt32('1'); //int val = Int32.Parse("1"); // Works
我不想转换为string,然后parsing它。
我很惊讶没有人提到了正确构build到System.Char
中的静态方法…
int val = (int)Char.GetNumericValue('8'); // val == 8
怎么样(对于char c
)
int i = (int)(c - '0');
哪个减去char值?
重新API的问题(评论),也许是一个扩展的方法?
public static class CharExtensions { public static int ParseInt32(this char value) { int i = (int)(value - '0'); if (i < 0 || i > 9) throw new ArgumentOutOfRangeException("value"); return i; } }
然后使用int x = c.ParseInt32();
每个人都在拼命解释为什么会发生这种情况。
一个Char,基本上是一个整数,但在ASCII表中有一个指针。 所有的字符都有一个相应的整数值,你可以清楚地看到,当试图parsing它。
Pranay显然有不同的字符集,这就是为什么他的代码不起作用。 唯一的办法是
int val = '1' - '0';
因为这个查找'0'
的表中的整数值然后是'基础值'减去你的字符格式的数字从这将给你原来的数字。
int i = (int)char.GetNumericValue(c);
又一个select:
int i = c & 0x0f;
这也应该做到这一点。
int val = '1' - 48;
int val = '1' - '0';
这可以使用ascii代码完成,其中'0'是最低的,数字字符从那里计算
您可以使用以下扩展方法:
public static class CharExtensions { public static int CharToInt(this char c) { if (c < '0' || c > '9') throw new ArgumentException("The character should be a number", "c"); return c - '0'; } }
最安全的方法是使用Int32.TryParse方法。 看到这里: http : //dotnetperls.com/int-tryparse
包含hex表示的一些其他答案的扩展:
public int CharToInt(char c) { if (c >= '0' && c <= '9') { return c - '0'; } else if (c >= 'a' && c <= 'f') { return 10 + c - 'a'; } else if (c >= 'A' && c <= 'F') { return 10 + c - 'A'; } return -1; }
你可以尝试这样的事情:
int val = Convert.ToInt32("" + '1');