任意的两个IP段,怎样判断他们是否有交集? asp.netIP 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你把IP转换为了再进行判断处理即可 /// <summary> /// 判断IP是否在IP段里 /// </summary> /// <param name="start"></param> /// <param name="end"></param> /// <param name="current"></param> /// <returns></returns> public static bool BetweenIP(string start, string end, string current) { bool result = false; if (current == "::1") current = "127.0.0.1"; if (current == start) result = true;//如果指定的IP范围就是一个IP,那么直接匹配看是否相等 else//如果指定IP范围 是一个起始IP范围区间 { byte[] start_ip_array = Get4Byte(start);//将点分十进制 转换成 4个元素的字节数组 byte[] end_ip_array = Get4Byte(end); byte[] ip_array = Get4Byte(current); bool tmpRes = true; for (int i = 0; i < 4; i++) { //从左到右 依次比较 对应位置的 值的大小 ,一旦检测到不在对应的范围 那么说明IP不在指定的范围内 并将终止循环 if (ip_array[i] > end_ip_array[i] || ip_array[i] < start_ip_array[i]) { tmpRes = false; break; } } result = tmpRes; } return result; } /// <summary> /// 将IP四组值 转换成byte型 /// </summary> /// <param name="ip"></param> /// <returns></returns> static byte[] Get4Byte(string ip) { string[] _i = ip.Split('.'); List<byte> res = new List<byte>(); foreach (var item in _i) { res.Add(Convert.ToByte(item)); } return res.ToArray(); } 不知道下面方法行不行 把起始ip地址转成数值,如192.168.0.1-192.168.0.255转成数值192<<24+168<<16+1 - 192<<24+168<<16+255然后看这两个起始数值是否有交集 如果你所谓的"交集"就是对二进制进行与运算的话直接把IP字符串转IP格式,然后获取IP的int型表示两个int做&运算 有相同的数字段就算交集吗?arraylist ar1=split(.)arraylist ar2=split(.)for(int i=0;i<ar1.lenght,i++){ for(int k=0;k<ar2.lenght,k++) { if(ar1[i]==ar2[k]) ..........................有交集 }} 额,如果告诉你ip可以转换成long那么他就是直线上滴两条线段,如果是两条线段你应该能判定他们有没有交集呢把 同意。假设分别是 ip1-ip2 和 ip3-ip4,那么判断类似这样的表达式就差不多: ip2>=ip3 && ip1<=ip4 从 #7 楼的意思出发,判断它们没有交集,其实不外乎有两种情况——第一段区域在第二段的左边、或者在第二段的右边于是可以写 ip2<ip3 || ip1>ip4然后取“反”,就是答案了。 (新手)二维数组问题.... Object reference not set to an instance of an object 问一个WEB控件的问题 如何在.net装配件获取WEB虚拟目录的物理路径? 这样的情况到底用什么编码? ComponentOne 问题? 数据库连接字窜应该放在哪里最好? 关于网站挂到服务器,隔一段时间就无法访问 后台隐藏类中,当客户端触发一个事件后调用隐藏类中的方法处理。。。。。 我想在程序里面产生templateColunm,怎么写? TCP通信如何在aspx网页上实现 获取用户在线时间
/// <summary>
/// 判断IP是否在IP段里
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="current"></param>
/// <returns></returns>
public static bool BetweenIP(string start, string end, string current)
{
bool result = false; if (current == "::1") current = "127.0.0.1";
if (current == start) result = true;//如果指定的IP范围就是一个IP,那么直接匹配看是否相等
else//如果指定IP范围 是一个起始IP范围区间
{
byte[] start_ip_array = Get4Byte(start);//将点分十进制 转换成 4个元素的字节数组
byte[] end_ip_array = Get4Byte(end);
byte[] ip_array = Get4Byte(current); bool tmpRes = true;
for (int i = 0; i < 4; i++)
{
//从左到右 依次比较 对应位置的 值的大小 ,一旦检测到不在对应的范围 那么说明IP不在指定的范围内 并将终止循环
if (ip_array[i] > end_ip_array[i] || ip_array[i] < start_ip_array[i])
{
tmpRes = false; break;
}
}
result = tmpRes;
}
return result;
} /// <summary>
/// 将IP四组值 转换成byte型
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
static byte[] Get4Byte(string ip)
{
string[] _i = ip.Split('.'); List<byte> res = new List<byte>();
foreach (var item in _i)
{
res.Add(Convert.ToByte(item));
} return res.ToArray();
}
把起始ip地址转成数值,如192.168.0.1-192.168.0.255转成数值192<<24+168<<16+1 - 192<<24+168<<16+255然后看这两个起始数值是否有交集
直接把IP字符串转IP格式,然后获取IP的int型表示
两个int做&运算
arraylist ar2=split(.)
for(int i=0;i<ar1.lenght,i++)
{
for(int k=0;k<ar2.lenght,k++)
{
if(ar1[i]==ar2[k])
..........................有交集
}
}
那么他就是直线上滴两条线段,如果是两条线段你应该能判定他们有没有交集呢把