关于IP地址字符串拆分组装,以及大小比较、范围判断,比较不容易。
但是,我们知道IP地址,实际上是四组十六进制的数字,这样就简单多了。
比如:
10.201.18.6–>
10->0A
201->C9
18->12
6->06
组合起来,就是0AC91206
10.201.18.201–>
10->0A
201->C9
18->12
6->C9
组合起来,就是0AC912C9
如果一个IP介于0AC91206和0AC912C9之间,那么该IP地址就在10.201.18.6 和10.201.18.201之间。
比较思路如下:
1、将IP地址拆解成4份,10.201.18.6 -->10,201,18,6
2、分别转换成【两位】的十六进制 10,201,18,6->0A,C9,12,06
3、组合成一个十六进制字符串:0A,C9,12,06–>0AC91206
4、将其转换成一个Long星整数,进行比较。
String StartIP = "";
String EndIP = "";
//四个texbox组装成一个IP地址
StartIP = int.Parse(IpStart1.Text).ToString("X2") +
int.Parse(IpStart2.Text).ToString("X2") +
int.Parse(IpStart3.Text).ToString("X2") +
int.Parse(IpStart4.Text).ToString("X2");
EndIP = int.Parse(IpEnd1.Text).ToString("X2") +
int.Parse(IpEnd2.Text).ToString("X2") +
int.Parse(IpEnd3.Text).ToString("X2") +
int.Parse(IpEnd4.Text).ToString("X2");
//将IP转换成数字
//是否在范围内,那就比较数字的大小范围吧!
Int64 ip=Convert.ToInt64(StartIP, 16);
//将数字转换成一个【八位的】十六进制主席
String IP = i.ToString("X8");
//IP的第一段
String ip1 = Convert.ToInt32(IP.Substring(0, 2), 16).ToString();
//IP的第二段
String ip2 = Convert.ToInt32(IP.Substring(2, 2), 16).ToString();
//IP的第三段
String ip3 = Convert.ToInt32(IP.Substring(4, 2), 16).ToString();
//IP的第四段
String ip4 = Convert.ToInt32(IP.Substring(6, 2), 16).ToString();
//用这四个段,组装成一个IP
String ip = $"{ip1}.{ip2}.{ip3}.{ip4}";
这样处理,就方便多了!