当创建一个带有数字的程序(如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#相当新,所以任何帮助都会非常感激。谢谢!
答案 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.