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

C#数字转字符串后取首字符转int得到54而非预期6的问题

问题复现代码

static void Main()
{
    int a = 612345;
    string b = Convert.ToString(a);
    char c = Convert.ToChar(b[0]);
    int d = Convert.ToInt32(c);
    Console.WriteLine(d); 
    // 预期输出6,实际输出54
}
问题原因

C#中char本质是16位值类型,存储的是对应字符的Unicode编码值。阿拉伯数字字符'0'到'9'的编码和ASCII标准兼容,从48开始连续排布:

  • '0'对应编码值48
  • '1'对应编码值49
  • 以此类推,'6'对应的编码值为48 + 6 = 54

调用Convert.ToInt32传入char类型参数时,方法会直接返回该字符存储的原生编码值,不会解析字符代表的数字语义——这和传入字符串"6"时解析内容得到数字6的逻辑完全不同,因此最终输出54而非预期结果。

修复方案

任选以下一种修改方式即可得到输出6的预期结果:

  • 利用数字字符连续编码的特性做差值计算,是性能最高的写法:
static void Main()
{
    int a = 612345;
    string b = Convert.ToString(a);
    char c = b[0]; // 字符串索引器直接返回char类型,无需额外调用Convert.ToChar
    int d = c - '0';
    Console.WriteLine(d); // 输出6
}
  • 将char转为单字符字符串后再做数值转换,写法更直观:
static void Main()
{
    int a = 612345;
    string b = Convert.ToString(a);
    char c = b[0];
    int d = int.Parse(c.ToString());
    // 等价写法:int d = Convert.ToInt32(c.ToString());
    Console.WriteLine(d); // 输出6
}
  • 使用char类型内置的数值获取方法:
static void Main()
{
    int a = 612345;
    string b = Convert.ToString(a);
    char c = b[0];
    int d = (int)char.GetNumericValue(c); // 方法返回double类型,需强转int
    Console.WriteLine(d); // 输出6
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:30:43