繁体   English   中英

C#FormatException将Hex转换为十进制时未处理

[英]C# FormatException Unhandled when converting Hex to decimal

所以我还在学习C#,我有点问题。 我正在制作一个非常简单的Windows窗体应用程序,有两个文本框,输入和输出,用于从十六进制到十六进制的转换。 这是我的代码:

        string input = textBox1.Text;
        int Output = Convert.ToInt32(input, 16);
        textBox2.Text = Output.ToString();

        //Textbox1 is Input
        //Textbox2 is Output

您可能会遇到两个例外情况。 首先,是您描述的FormatException。 如果输入字符串格式不正确,则会发生这种情况; 说它包含非十六进制字符,空格或其他内容。 您遇到的另一个例外是溢出异常,当第一个文本框中的十六进制变为对于32位整数而言太大的数字时。

要处理异常,您将需要一个try catch块。 有关try catch的更多信息,请访问https://msdn.microsoft.com/en-us/library/0yd65esw.aspx

使用一些错误检查编写此更好的方法可能如下所示:

string input = textBox1.Text;

try
{
    int Output = Convert.ToInt32(input, 16);
    textBox2.Text = Output.ToString();
}
catch (FormatException)
{
    MessageBox.Show("Input string is not in the correct format.");
}
catch (OverflowException)
{
    MessageBox.Show("Input is too large for conversion.");
}

//Textbox1 is Input
//Textbox2 is Output

正如Shar1er80和Landepbs指出的那样,如果输入正确,您提供的代码不会出错。 这是程序员验证输入不会出错的工作。 您可以像Shar1er80建议的那样使用正则表达式进行错误检查,但也有其他方法。 您不仅需要检查输入是否包含转换为十六进制的有效字符,还应检查长度。 每个十六进制字符可以是16个可能值(0-F)中的一个。 将它们中的两个放在一起产生256个可能的值,或恰好一个字节。 32位整数是4个字节,这意味着有效输入的最大长度为8个字符。 更多,整数将溢出。

您还应该决定是否要使用有符号整数或无符号整数。 在有符号整数中,一位用于符号,因此可以输出的最大正整数是无符号整数的一半。 您可以在https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx上阅读有关整数的更多信息并进行签名。

祝C#学习并坚持下去!

问题是什么? 这个代码看起来不错,只有一个例外,HEX限制为0 - 9和A - F.我建议为此添加输入验证。

编辑:检查此SO答案以验证十六进制输入检查字符串以查看是否所有字符都是十六进制值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM