正在转换一个值错误的字符串
本文关键字:一个 错误 字符串 转换 | 更新日期: 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。