正在转换一个值错误的字符串

本文关键字:一个 错误 字符串 转换 | 更新日期: 2023-09-27 17:59:03

我写了一个简单的代码,需要将字符串中的每个数字都作为Integer但当我尝试使用Convert.ToInt32()时,它会给我另一个值

示例:

string x="4567";        
Console.WriteLine(x[0]);

结果将是4,但如果我尝试使用转换

Console.WriteLine(Convert.ToInt32(x[0]));

它给我52!!

我尝试使用int.TryParse()及其相同的

正在转换一个值错误的字符串

根据文档:

ToInt32(Char)方法返回一个32位有符号整数,该整数表示值参数的UTF-16编码代码单元。如果值不是低代理项或高代理项,则此返回值也表示值的Unicode代码点。

为了得到4,您必须先将其转换为字符串,然后再转换为int32:

Console.WriteLine(Convert.ToInt32(x[0].ToString()));

您也可以通过这种方式循环字符串中的所有字符

foreach (char c in x)
{
    Console.WriteLine(c);  
}

将打印4,5,6,7

正如前面的答案所建议的那样,在转换为整数之前,将其作为一个字符串,这样它就不会返回ascii代码

char在内部是其ASCII表示的short integer

如果将char强制转换为int(显式或隐式),则会得到它的Ascii值。示例Convert.ToInt32('4')=52

但是,当您将其打印到Console时,您隐式地使用了它的ToString()方法,因此实际上您打印的是ASCII字符"4"。示例:Console.WriteLine(x[0])等效于Console.WriteLine("4")

试着使用ASCII字母,这样你就会清楚地注意到区别:

            Console.WriteLine((char)('a'));  // a
            Console.WriteLine((int)('a'));   // 97

现在玩char数学:

            Console.WriteLine((char)('a'+5));  // f
            Console.WriteLine((int)('a'+5));   // 102

最重要的是,只需使用int digit = int.Parse(x[0]);

或者有趣(但不太安全)的方式:int digit = x[0] - '0';

x不是x[0],x[0]是第一个字符,'4'是52。

相关文章: