Answers:
我很惊讶没有人提到内置于System.Char... 的静态方法
int val = (int)Char.GetNumericValue('8');
// val == 8
double,尽管它返回了一个
Char.GetNumericValue('⅓')确实返回0.3333...。感谢您指出了这一点!
怎么样(对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();
int.Parse,即在无效输入上引发异常,则需要添加其他边界检查:if (i < 0 || i > 9) throw new FormatException();
您可以使用以下扩展方法:
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';
}
}
char为,int我们必须检查输入参数的范围,而不是输出int值。
int值,因为数字字符的范围是在方法开始时执行的,因此将有正确的结果值,如果指定的字符不在数字字符的范围内,则会引发异常。与您提供的逻辑相同,但是在方法开始时执行范围检查。
if (c < 0 || c > 9)……
int val = '1' & 15;
ASCII字符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 val = Convert.ToInt32("" + '1');
Convert.ToInt32('1'.ToString())
其他一些答案的扩展,涵盖了十六进制表示形式:
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;
}