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

C# WinForm不使用内置函数实现int转Hex结果异常求助

代码问题分析与修复方案

核心错误点

  • 结果拼接逻辑错误:你在倒序遍历hexNum数组时,往hexList中添加的是数组索引j而非数组存储的十六进制字符,输入24032转换后刚好对应4位十六进制数,索引从3到0,因此输出为3210,这是你输出异常的直接原因。
  • 全局变量污染:hexList定义为类级别的全局变量,每次调用ToHex方法不会清空,多次点击转换按钮会叠加之前的转换结果。
  • 边界逻辑缺失:输入为0时,while(n!=0)的循环不会执行,会输出空内容。

修正后代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    List<string> errorList = new List<string>();
    string intInput = "";
    string msgOutput = "";

    private void btn_Hex_Click(object sender, EventArgs e)
    {
        intInput = box_Int.Text;
        int toHexFunc = Validator(intInput);
        ToHex(toHexFunc);
    }

    public void ToHex(int fromHexBtn)
    {
        // 处理输入为0的边界情况
        if (fromHexBtn == 0)
        {
            lbl_Message.Text = "0x0";
            return;
        }

        int n = fromHexBtn;
        char[] hexNum = new char[100];
        int i = 0;
        // 改为方法内局部变量,避免全局变量污染
        List<char> hexList = new List<char>();
        
        while (n != 0)
        {
            int iterTemp = n % 16;
            if (iterTemp < 10)
            {
                hexNum[i] = (char)(iterTemp + 48);
                i++;
            }
            else
            {
                hexNum[i] = (char)(iterTemp + 55);
                i++;
            }
            n = n / 16;
        }

        // 倒序拼接实际存储的十六进制字符
        for (int j = i - 1; j >= 0; j--)
        {
            hexList.Add(hexNum[j]);
        }

        msgOutput = "0x" + String.Join("", hexList);
        lbl_Message.Text = msgOutput;
    }
}

输入24032测试时,输出结果为0x5DE0,与教材示例一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:04