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

C#中int类型显示48而非0的问题排查求助

解决字符'0'转int时获取ASCII值而非十进制数值的问题

我明白你的困扰了——你把存储的字符串型'0'直接转成int的时候,拿到的是它的ASCII码48,但你实际想要的是十进制数值0对吧?而且你提到调试时变量u显示为0,这说明你可能在某个地方已经做对了转换逻辑,但往TRUCKS数组里存储的时候没处理好字符到数值的转换。

问题根源

字符串中的每个字符'0'本身的ASCII值就是48,所以如果直接把char类型强制转换为int,得到的会是字符的ASCII编码,而非你需要的十进制数值0。

解决方案:字符转十进制数值的两种常用方法

你可以在将字符串中的字符存入TRUCKS数组前,先做一步转换:

方法1:利用字符ASCII码的差值计算

因为数字字符的ASCII码是连续的('0'=48,'1'=49,…,'9'=57),所以用目标字符减去'0'的ASCII值,就能直接得到对应的十进制数值:

int numericValue = truckUpgradeArray[arrayPos] - '0';

方法2:使用字符串解析方法(更直观,容错性强)

把单个字符转成字符串后,用int.Parse()或者更安全的int.TryParse()来解析成数值:

// 基础解析
int numericValue = int.Parse(truckUpgradeArray[arrayPos].ToString());

// 安全解析(推荐,避免转换失败报错)
if (int.TryParse(truckUpgradeArray[arrayPos].ToString(), out int value))
{
    numericValue = value;
}
else
{
    // 处理转换失败的情况,比如默认设为0
    numericValue = 0;
}

结合你的代码修改示例

把转换逻辑整合到loadUpgrades方法中,完整示例如下:

void loadUpgrades() 
{
    truckUpgradeArray = null;
    int arrayPos = 0;
    truckUpgradeArray = PlayerPrefs.GetString("yourUpgradeKey"); // 替换为你实际使用的PlayerPrefs键名
    
    // 初始化TRUCKS数组(假设长度为6)
    int[] TRUCKS = new int[6];
    
    // 遍历字符串,逐个转换并存入数组
    for (arrayPos = 0; arrayPos < truckUpgradeArray.Length && arrayPos < 6; arrayPos++)
    {
        // 这里用方法1的差值转换,也可以替换成方法2的解析逻辑
        TRUCKS[arrayPos] = truckUpgradeArray[arrayPos] - '0';
    }
}

关于调试时变量u显示为0的说明

你提到调试时变量u的值是0,这大概率是因为u是已经经过上述转换后的数值,而你之前往TRUCKS数组存储时没做转换,所以数组里存的是字符的ASCII码48,两者的差异正好对应了你的描述。

额外注意事项

  • 要确保truckUpgradeArray的长度至少为6,或者在循环中加入边界判断,避免出现索引越界的错误;
  • 如果PlayerPrefs中取出的字符串可能为空、长度不足或者包含非数字字符,建议加入容错逻辑,比如给数组默认填充0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:15:08