C#的Convert.ToInt32(3)转换为51

时间:2017-02-23 00:55:02

标签: c#

当创建一个带有数字的程序(如1253)并将其转换为125 ^ 3时,我得到一个奇怪的错误,转换字符串似乎无法正常工作。这是我的代码:

        string example = "1253";

        // grab all but the last character
        int num = Convert.ToInt32(example.Substring(0, example.Length - 1));
        Console.WriteLine(num);

        // grab the last character
        //int pow = Convert.ToInt32(example.Substring(example.Length - 1));
        int pow = Convert.ToInt32(example[example.Length - 1]);
        Console.WriteLine(pow);

        // output num to the power of pow
        Console.WriteLine(Math.Pow(num, pow));
        Console.ReadKey();

变量pow的第一次初始化正常工作,但第二次(未注释掉)不是出于某种原因。抓住字符串的最后一个字符的不同方法,但出于某种原因,第一个" 3"将转换为3,但对于后者" 3"将转换为51。

这是使用pow的注释初始化时的输出:
125个
3
1953125

这是使用pow的未注释初始化时的输出:
125个
51个
8.75811540203011E + 106

我对C#相当新,所以任何帮助都会非常感激。谢谢!

2 个答案:

答案 0 :(得分:9)

在字符串example[example.Length - 1]上使用索引器时,系统会返回char'3'不是字符串"3" ) 。

这意味着使用char作为参数调用Convert.ToInt32的不同重载。应用于char的转化与应用于string的转化完全不同。

  

char :将指定的Unicode字符的值转换为等效的32位有符号整数。

而不是

  

string :将指定的数字字符串表示形式转换为等效的32位有符号整数。

如果您选择peek at a Unicode table,则会发现'3'的值为十六进制33或51。

example[example.Length - 1].ToString()可能会有更好的运气。

答案 1 :(得分:0)

将字符传递给Convert.ToInt32()时,它会将其转换为ASCII值。这就是为什么你的3成为51.