0

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

这是示例用户输入: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

4 回答 4

4

使用真实的 IP 地址解析器(System.Net.IPAddress)怎么样?

IPAddress ipAddr;
bool ok = IPAddress.TryParse(EDCGIPAddressFwrTxt.Text, out ipAddr);
if (ok)
{
    byte[] bytes = ipAddr.GetAddressBytes();
}
于 2013-05-22T18:24:37.290 回答
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");
}
于 2013-05-22T18:30:08.343 回答
1

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

改为用于Int32.TryParse用户输入的输入。

于 2013-05-22T18:22:16.053 回答
0

像这样使用 TryParse。

int num;
bool result = Int32.TryParse(value, out num);
if(result){
   // do something.
}
于 2013-05-22T18:23:46.750 回答