为什么char的Convert.ToInt32返回ascii代码?

时间:2013-12-14 00:37:41

标签: c# char int

为什么此代码打印48(ASCII代码为0)而不是0?

char c = '0';
Console.WriteLine(Convert.ToInt32(c));

这有什么特别原因吗?

3 个答案:

答案 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');