为什么此代码打印48(ASCII代码为0)而不是0?
char c = '0';
Console.WriteLine(Convert.ToInt32(c));
这有什么特别原因吗?
答案 0 :(得分:6)
因为,MSDN states,Convert.ToInt32方法(字符串)返回:
32位有符号整数,表示值参数的UTF-16编码代码点。
和代码点意味着:
在字符编码术语中,代码点或代码位置是构成代码空间的任何数值。例如,ASCII包括0h到7Fh
范围内的128个代码点
从逻辑的角度来看,您对Convert.ToInt32('a')
的期望是什么?转换用于类型转换,不用于解释。解释可以通过解析方法完成。
答案 1 :(得分:2)
因为那是你所调用的超负荷。您希望它的行为与Convert.ToInt32(string input)
相同,但实际上您正在调用Convert.ToInt32(char input)
,如果您检查文档,则会明确声明它将返回unicode值(在这种情况下)与ASCII值相同。)
这里的文件; http://msdn.microsoft.com/en-us/library/ww9t2871(v=vs.110).aspx
答案 2 :(得分:1)
你应该这样做
char c = '0';
Console.WriteLine(Convert.ToInt32(Convert.ToString(c)));
要花哨
char c = '0';
Console.WriteLine(c - '0');