解决方案 »

  1.   

    你把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();
            }
      

  2.   

    不知道下面方法行不行
     
    把起始ip地址转成数值,如192.168.0.1-192.168.0.255转成数值192<<24+168<<16+1 - 192<<24+168<<16+255然后看这两个起始数值是否有交集
      

  3.   

    如果你所谓的"交集"就是对二进制进行与运算的话
    直接把IP字符串转IP格式,然后获取IP的int型表示
    两个int做&运算
      

  4.   

    有相同的数字段就算交集吗?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])
            ..........................有交集
       }
    }
      

  5.   

    额,如果告诉你ip可以转换成long
    那么他就是直线上滴两条线段,如果是两条线段你应该能判定他们有没有交集呢把
      

  6.   

    同意。假设分别是 ip1-ip2 和 ip3-ip4,那么判断类似这样的表达式就差不多:     ip2>=ip3 && ip1<=ip4
      

  7.   

    从 #7 楼的意思出发,判断它们没有交集,其实不外乎有两种情况——第一段区域在第二段的左边、或者在第二段的右边于是可以写   ip2<ip3 || ip1>ip4然后取“反”,就是答案了。