您可能会遇到两种例外情况。首先,就像你描述的那样是一个FormatException。如果输入的字符串格式不正确,可能会发生这种情况;说它包含一个非十六进制字符,一个空格或其他东西。您遇到的另一个异常是一个溢出异常,当第一个文本框的十六进制数变为32位整数的数字太大时。
为了处理异常,你需要一个try catch块。查看https://msdn.microsoft.com/en-us/library/0yd65esw.aspx了解更多关于try catch的信息。
一些错误检查写这更好的办法可能看起来像下面的东西:
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#并坚持下去!
我怀疑你的问题是当应用第一次启动时'textBox1'是空的,并且转换失败。当你得到你的异常时,'input'的值是多少?使用调试器查明。 – vcsjones 2015-03-30 21:13:46