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

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

        //Textbox1 is Input
        //Textbox2 is Output

#1楼 票数:3

您可能会遇到两个例外情况。 首先,是您描述的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#学习并坚持下去!

#2楼 票数:0

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

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

  ask by Eric Wiles translate from so

未解决问题?本站智能推荐:

3回复

C#FormatException未处理

我正在解析游戏中的聊天内容,并收到以下字符串:“榨68 00 00 37 00 45 00 00” 我在我不明白的最后一行收到格式异常。 它说输入字符串的格式不正确。 我已经检查了调试器,第一个元素说它是“ 68”。 任何人都知道发生了什么事吗?
1回复

C#FormatException未处理

我正在使用Microsoft Visual C#2010 Express。 我目前正在尝试让我的计算器进行加法和减法,但是我一直收到此错误? 我在整个计算器中都使用switch语句。
2回复

通过DOM方法处理XML时未处理C#FormatException

我刚刚开始学习SAX / Stream以及用于解析和处理XML文件的DOM方法。 我的情况是,我要处理从给定的XML文件中获取的信息,该XML文件是从托管的FTP服务器检索到的,将其放入单独的Array-lists中,然后再将这些列表传递到DBManager中以将它们添加到数据库中。 但是,
3回复

在C#中将十进制转换为十六进制,并出现错误“ mscorlib.dll中发生了'System.FormatException'类型的未处理异常”

我的代码很简单: otdr_Portobject是一个COM端口。 int_averagesCon是一个NumericUpDown,值为64。 当我运行程序时,总是有一个消息框显示: mscorlib.dll中发生了'System.FormatException'类
4回复

System.FormatException:将字符串转换为十进制时,输入字符串的格式不正确。

我对ASP.NET和C#有一点问题。 这是我的错误代码: mscorlib.dll中出现“System.FormatException”类型的异常,但未在>用户代码中处理 附加信息:输入字符串的格式不正确。 我试过Decimal.Parse,Decimal.T
2回复

为什么在十进制和十六进制之间转换会引发formatexception?

当我编译并运行以下代码时,它将引发以下异常: 未处理的异常:System.FormatException:指定的格式'X'在System.NumberFormatter.NumberToString(System.String格式,System.Globalization.Number
2回复

DataGridView中的C#FormatException

我用一些列创建了一个DataGridView。 订单列仅允许用户输入整数。 当我输入“ j”时(例如),它会引发FormatException,并且我尝试添加try catch来解决此问题,但是它看起来不起作用。
1回复

C#将单六进制转换为十进制

我正在从设备中接收六数据: E8C6 。 应该是一个负数。 我尝试使用Convert.ToInt32(data, 16)但正得到一个较大的正值。 然后,我尝试使用Sbyte转换,但出现溢出异常。 那么正确的转换方法是什么?