我正在尝试从用户输入的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]);
答案 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.
}