什么是将char
转换为int
的正确方法? 这给49
:如何将char转换为int?
int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works
我不想转换为字符串,然后解析它。
什么是将char
转换为int
的正确方法? 这给49
:如何将char转换为int?
int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works
我不想转换为字符串,然后解析它。
我很惊讶没有人提到过内置于System.Char
的静态方法...
int val = (int)Char.GetNumericValue('8');
// val == 8
好地方! +1非常奇怪,它返回一个'double',虽然 – 2010-09-08 09:16:39
我同意,我不明白为什么它返回'双' - 单个字符如何可能表示一个浮点数? – 2010-09-08 16:25:10
有许多Unicode字符代表非整数,例如[U + 2153](http://www.fileformat.info/info/unicode/char/2153/index.htm)。 – dtb 2010-09-13 12:24:54
约(用于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();
我应该提到,我知道这个,但有没有其他方法?我想知道是否有API来做到这一点? – tvr 2010-09-08 08:22:42
如果你想要一个类似于'int.Parse'的行为,即在无效输入上抛出一个异常,你需要添加额外的边界检查:'if(i < 0 || i > 9)throw new FormatException();' – 2010-09-08 08:23:55
@ user386338 I恐怕没有。 – 2010-09-08 08:25:30
int val = '1' - '0';
这可以使用ASCII码,其中“0”是最低的字符数从那里
int val = '1' - 48;
为什么这个工作? – 2015-09-19 16:54:19
@Luke Xu:'0'有ASCII代码0x30,它是十进制的48,所以这与'1'相同'0' – NiKiZe 2018-03-09 13:49:47
计数您可以使用来完成以下扩展方法:
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';
}
}
如果c ='x':)怎么办 – tvr 2010-09-08 08:40:48
查看更新,对不起,我匆忙;) – 2010-09-08 09:05:09
@ 0xA3范围检查一般在方法的开始。在语义上,如果我们要将'char'转换为'int',我们必须检查输入参数的范围,而不是输出'int'值。 – 2010-09-08 11:04:28
完成此操作的最安全方法是使用Int32.TryParse方法。看到这里: http://dotnetperls.com/int-tryparse
每个人都在伪造的是解释为什么发生这种情况。
一个字符,基本上是一个整数,但在ASCII表中有一个指针。所有字符都有相应的整数值,正如您在分析时可以清楚看到的那样。
Pranay显然有不同的字符集,这就是为什么他的代码不起作用。 唯一的办法就是
int val = '1' - '0';
,因为这会查找的'0'
表中,然后将“基值” 从这个减去字符格式的数字会给你原来的号码的整数值。
int i = (int)char.GetNumericValue(c);
还有另一个选择:
int i = c & 0x0f;
这应该做到这一点。
一些其他的答案的一个扩展,涵盖了十六进制表示:
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 = '1' & 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是equels 15)把你得到的实际数量(0000 = 0,0001 = 1,0010 = 2,...)
[此](https://stackoverflow.com/q/239103/465053)问题的可能的复制。 – RBT 2017-08-22 11:54:47