拆分IP八位字节时未处理的'FormatException'异常

时间:2013-05-22 18:19:16

标签: c# winforms

我正在尝试从用户输入的IP地址中分割八位字节,然后将这些八位字节放入文本文档中。问题是我收到“FormatException未处理”警告。我是编程新手,所以我不确定如何解决这个问题。

以下是示例用户输入:123.456.789

这是我的代码:

string fwrEdcgIp;
fwrEdcgIp = EDCGIPAddressFwrTxt.Text;

//Separate out EDCG IP Foreward octet
string[] edipf = fwrEdcgIp.Split('.');
int fwrEdcgIp1 = Int32.Parse(edipf[0]);
int fwrEdcgIp2 = Int32.Parse(edipf[1]);
int fwrEdcgIp3 = Int32.Parse(edipf[2]);
int fwrEdcgIp4 = Int32.Parse(edipf[3]);

4 个答案:

答案 0 :(得分:4)

如何使用真正的IP地址解析器(System.Net.IPAddress)?

IPAddress ipAddr;
bool ok = IPAddress.TryParse(EDCGIPAddressFwrTxt.Text, out ipAddr);
if (ok)
{
    byte[] bytes = ipAddr.GetAddressBytes();
}

答案 1 :(得分:1)

根据设计,如果输入不是有效整数,Int32.Parse将抛出FormatException。它还能做什么?

使用Int32.TryParse代替用户输入的内容。

答案 2 :(得分:1)

edipf中的一个字符串很可能不是有效整数。也许用户输入的内容不正确。抛出异常时,您应该选择“中断”并查看导致问题的行并查看问题所在。如果edipf[x]格式错误,那么这就是您的问题。

我会使用try/catch块来捕获此异常并通知用户输入正确的格式。 (实际上我会使用I4V的解决方案,如果!ok,请告知用户用户提供的格式不正确,但了解这一点仍然很重要。)

string fwrEdcgIp;
fwrEdcgIp = EDCGIPAddressFwrTxt.Text;

//Separate out EDCG IP Foreward octet
string[] edipf = fwrEdcgIp.Split('.');
try {
    int fwrEdcgIp1 = Int32.Parse(edipf[0]);
    int fwrEdcgIp2 = Int32.Parse(edipf[1]);
    int fwrEdcgIp3 = Int32.Parse(edipf[2]);
    int fwrEdcgIp4 = Int32.Parse(edipf[3]);
} catch (FormatException) {
    MessageBox.Show("Please input IP address in the format "123.123.123.123");
}

答案 3 :(得分:0)

使用TryParse。

int num;
bool result = Int32.TryParse(value, out num);
if(result){
   // do something.
}