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
相关产品推荐
相关产品推荐

