You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中为何Parse可用而Convert.ToInt32无法正确工作?

问题描述

我想把字符串str中的每个数字平方后拼接到字符串pow中,写了如下代码:

string str = "1234";
string pow = "";

foreach(char c in str)
{
   pow += Math.Pow(Convert.ToInt32(c), 2);
}

预期返回结果为14916,但实际返回:2401250026012704。

而使用int.Parse(c.ToString())的代码能得到正确结果:

foreach(char c in str)
{
    int i = int.Parse(c.ToString());
    pow += Math.Pow(i, 2);
}

请问为何Parse可用而Convert.ToInt32无法正确工作?

原因解析

这俩方法处理字符的逻辑根本不一样:

  • Convert.ToInt32(c)是直接取字符的Unicode编码值转成整数。比如字符'1'的编码是49,'2'是50,你相当于在算49²=2401、50²=2500、51²=2601、52²=2704,拼起来就是你看到的错误结果2401250026012704。
  • int.Parse(c.ToString())是先把单个字符转成字符串(比如'1'变"1"),再解析成对应的数字1,平方后是1,按这个逻辑处理每个字符,自然得到正确的14916。

要是想用Convert类实现正确转换,也可以写Convert.ToInt32(c) - '0'——因为数字字符的编码是连续的,'0'的编码是48,用目标字符的编码减去'0'的编码,就能得到对应的数字值。

内容的提问来源于stack exchange,提问作者Barta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:20:49