C#将string转换为int出错了

时间:2017-08-05 14:46:58

标签: c# string int converter

我有一个包含数字的string,如下所示:

string keyCode = "1200009990000000000990";

现在我希望将第2位的数字设为integer,我确实如此:

int number = Convert.ToInt32(keyCode[1]);

但我没有获得2,而是50

我做错了什么?

5 个答案:

答案 0 :(得分:5)

50是char' 2'的ascii代码。 0-> 48,1-> 49等......

你可以做到

quickestTime

答案 1 :(得分:4)

嗯,你有50,因为它是2的ascii代码。

你得到它是因为你指向char,当c#将char转换为int时,它会返回其ascii代码。您应该使用int.Parse代替string

int.Parse(keyCode[1].ToString());

int.Parse(keyCode.Substring(1,1));

答案 2 :(得分:4)

您发现当int n = Convert.ToInt32( '2' ); 50时,您获得了50。这是对的。

显然,你没想得到2,你期望获得Convert.ToInt32( '2' )。这是不正确的。

期望2会给你Convert.ToInt32( 'A' )是不正确的,因为如果你做'2'会有什么期望?

字符不是数字。但当然,在计算机内部,一切都表示为数字。因此,有一个映射告诉我们用什么数字来表示每个字符。 Unicode就是这样的映射,ASCII是您可能听说过的另一种映射。这些映射规定字符50对应于数字'A',就像它们规定字符65对应于数字Convert.ToInt32( char c )一样。

'2'执行非常基本的转换,它基本上将字符重新解释为数字,因此它允许您查看字符对应的数字。但是如果从2获得int n = Int32.Parse( keyCode.SubString( 1, 1 ) );,那么这不是您想要的转换。

相反,您需要更复杂的转化,具体如下:wp_count_comments

答案 3 :(得分:1)

你需要

int number = (int)Char.GetNumericValue(keyCode[1]);

需要强制转换,因为Char.GetNumericValue会返回一个双精度数。

答案 4 :(得分:0)

正如Ofir所说,另一种方法是int number = int.Parse(keyCode[1].ToString())

此命令可以这样解释:intInt32的简写,其中包含Parse(string)方法。 Parse仅在输入是仅包含数字的字符串时才起作用,因此除非TryParse(检查是否可以解析字符串的方法)已被调用,否则它并不总是最佳使用返回true,但在这种情况下,由于您的输入字符串总是一个数字,因此您可以先使用Parse而不使用TryParsekeyCode[1]实际上隐式地将keyCode转换为char[],以便它可以检索特定的索引,这就是为什么你需要在它上面调用ToString()才能解析它。

这是我个人最喜欢的将stringchar转换为int的方式,因为一旦您了解明确执行的转化,就很容易理解含蓄。如果要转换的字符串不是静态的,那么使用不同的方法可能会更好,因为if语句检查是否可以解析它或try使得编码和执行所需的时间比其中一个解决方案。