c#为什么返回49:Convert.ToInt32(’1’)

可能重复:
c#将char转换为int

这有效:

int val = Convert.ToInt32("1"); 

但这不是:

 int val = Convert.ToInt32('1'); // returns 49 

这不应该转换为实际的int吗?

它返回字符1的ASCII值

第一个语句将参数视为字符串并将值转换为Int,第二个语句将参数视为char并返回其ascii值

正如其他人所说,Convert返回ASCII码。 如果你想将'1'转换为1 (int)你应该使用

 int val = Convert.ToInt32('1'.ToString()); 

代码'1'(char)49相同(因为字符1的Unicode代码点是49)。 并且Convert.ToInt32(char)将该字符的代码点作为int

正如其他人已经指出的那样:在你的第二个例子( '1' )中,你使用的是字面文字。 char是数字类型。 没有像字符串示例( "1" )那样完成解析,因为它已经是一个数字 – 只是一个更广泛格式的转换(从16位到32位)。

它将’1’视为char,并且任何char的intforms都是它的ASCII等价物,因此它返回其ASCII等价物。 但是在“1”的情况下,它将其视为字符串并将其转换为整数。