C#将字符串转换为int出错
我有一个C#将字符串转换为int出错,c#,string,int,converter,C#,String,Int,Converter,我有一个字符串,其中包含数字,如下所示: 现在我想得到位置2上的数字为整数,我喜欢这样: int number = Convert.ToInt32(keyCode[1]); 但是我得到的不是2,而是50 我做错了什么?你需要 int number = (int)Char.GetNumericValue(keyCode[1]); 需要强制转换,因为返回双精度 50是字符“2”的ascii码。0->48,1->49等 你能行 int number = keyCode[1]-'0'; 你得到了
字符串
,其中包含数字,如下所示:
现在我想得到位置2上的数字为整数
,我喜欢这样:
int number = Convert.ToInt32(keyCode[1]);
但是我得到的不是2
,而是50
我做错了什么?你需要
int number = (int)Char.GetNumericValue(keyCode[1]);
需要强制转换,因为返回双精度 50是字符“2”的ascii码。0->48,1->49等 你能行
int number = keyCode[1]-'0';
你得到了50,因为它是
2
的ascii码
您得到它是因为您指向一个char
,当c#将char
转换为int
时,它会返回其ascii代码。您应该改为使用int.Parse
,它接受字符串
int.Parse(keyCode[1].ToString());
或
您观察到,当您执行
intn=Convert.ToInt32('2')代码>你得到50
。没错
显然,您没有期望得到50
,而是期望得到2
。这是不正确的期望
期望Convert.ToInt32('2')
将为您提供2
,这是不正确的,因为如果您执行Convert.ToInt32('A')
,您会期望什么
字符不是数字。当然,在计算机内部,一切都是用数字来表示的。所以,有一个映射告诉我们用什么数字来表示每个字符。Unicode就是这样一种映射,ASCII是您可能听说过的另一种映射。这些映射规定字符'2'
对应于数字50
,正如它们规定字符'A'
对应于数字65
Convert.ToInt32(char c)
执行一个非常基本的转换,它本质上将字符重新解释为一个数字,因此它允许您查看字符对应的数字。但是如果你想从'2'
中得到2
,那不是你想要的转换
相反,您需要更复杂的转换,如下所示:intn=Int32.Parse(keyCode.SubString(1,1))
正如Ofir所说,另一种方法是int number=int.Parse(keyCode[1].ToString())
这个命令可以这样解释:int
是Int32
的缩写,它包含一个Parse(string)
方法Parse
仅在输入为仅包含数字的字符串时才起作用,因此除非调用了TryParse
(检查是否可以解析字符串的方法)并返回true
,否则它并不总是最好的使用方法,但在这种情况下,由于输入字符串始终是数字,您可以使用Parse
,而无需先使用TryParse
keyCode[1]
实际上首先隐式地将keyCode转换为char[]
,这样它就可以检索特定的索引,这就是为什么在解析它之前需要对其调用ToString()
这是我个人最喜欢的将字符串
或字符
转换为int
的方法,因为一旦理解了显式和隐式执行的转换,就很容易理解。如果要转换的字符串不是静态的,那么最好使用另一种方法,因为检查它是否可以被解析的If
语句或try
会使编码和执行比其他解决方案花费更长的时间。我想使用keycode.Substring(1,1)代替keycode[1]。如中所述,转换为32(字符)
:将指定Unicode字符的值转换为等效的32位带符号整数。
int.Parse(keyCode[1].ToString());
int.Parse(keyCode.Substring(1,1));