我有一个包含数字的string
,如下所示:
string keyCode = "1200009990000000000990";
现在我希望将第2位的数字设为integer
,我确实如此:
int number = Convert.ToInt32(keyCode[1]);
但我没有获得2
,而是50
。
我做错了什么?
答案 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)
答案 4 :(得分:0)
正如Ofir所说,另一种方法是int number = int.Parse(keyCode[1].ToString())
。
此命令可以这样解释:int
是Int32
的简写,其中包含Parse(string)
方法。 Parse
仅在输入是仅包含数字的字符串时才起作用,因此除非TryParse
(检查是否可以解析字符串的方法)已被调用,否则它并不总是最佳使用返回true
,但在这种情况下,由于您的输入字符串总是一个数字,因此您可以先使用Parse
而不使用TryParse
。 keyCode[1]
实际上隐式地将keyCode转换为char[]
,以便它可以检索特定的索引,这就是为什么你需要在它上面调用ToString()
才能解析它。
这是我个人最喜欢的将string
或char
转换为int
的方式,因为一旦您了解明确执行的转化,就很容易理解含蓄。如果要转换的字符串不是静态的,那么使用不同的方法可能会更好,因为if
语句检查是否可以解析它或try
使得编码和执行所需的时间比其中一个解决方案。