如何将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');