所以我还在学习C#,我有点问题。我正在制作一个非常简单的Windows窗体应用程序,有两个文本框,输入和输出,用于从十六进制到十六进制的转换。这是我的代码:
string input = textBox1.Text;
int Output = Convert.ToInt32(input, 16);
textBox2.Text = Output.ToString();
//Textbox1 is Input
//Textbox2 is Output
答案 0 :(得分:3)
您可能会遇到两个例外情况。首先,是您描述的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#学习并坚持下去!
答案 1 :(得分:0)
有什么问题?这个代码看起来不错,有一个例外,HEX限制为0 - 9和A - F.我建议为此添加输入验证。
EDITED: 检查此SO答案以验证十六进制输入 Check a string to see if all characters are hexadecimal values