从http://topic.csdn.net/u/20100810/12/19bcf715-c72c-4000-be85-38d5797860ea.html知道怎么判断ip大小的方法了,但是这个是写死了ip地址,我想先判断出地址,然后和数据库中的两个ip地址去进行大小比较。        private long getIpNum(String ipAddress)
        {
            String[] ip = ipAddress.Split(new char[] { '.' });
            long a = int.Parse(ip[0]);
            long b = int.Parse(ip[1]);
            long c = int.Parse(ip[2]);
            long d = int.Parse(ip[3]);            return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
        }        private bool isInner(long clientIp, long begin, long end)
        {
            return (clientIp >= begin) && (clientIp <= end);
        }   调用方式是:
            long ip = getIpNum("60.162.200.10");
            long start_ip = getIpNum("60.162.200.0");
            long end_ip = getIpNum("60.162.201.255");            if (isInner(ip, start_ip, end_ip))
            {
                Response.Write("<script>alert('是');history.back()</script>");
            }
            else
            {
                Response.Write("<script>alert('不是');history.back()</script>");
            } 这样是没问题,可是我希望long ip = getIpNum("60.162.200.10");处的60.162.200.10是取一个label控件的值
lblIp.Text = Page.Request.UserHostAddress;
我把调用方式的long ip = getIpNum("60.162.200.10");改成了long ip = getIpNum("lblIp.Text");
可是这样出错,getIpNum中的
         String[] ip = ipAddress.Split(new char[] { '.' });
            long a = int.Parse(ip[0]);
            long b = int.Parse(ip[1]);
只有两个数了,a=lblIp,b=Text。请问这里应该怎么写呢?

解决方案 »

  1.   


            /// <summary>
            /// IP地址和数字之间转化的算法        /// </summary>
            /// <param name="ipAddress">传入IP地址</param>
            /// <returns></returns>        public static uint IPToInt(string ipAddress)
            {
                string disjunctiveStr = ".,: ";
                char[] delimiter = disjunctiveStr.ToCharArray();
                string[] startIP = null;
                for (int i = 1; i <= 5; i++)
                {
                    startIP = ipAddress.Split(delimiter, i);
                }
                string a1 = startIP[0].ToString();
                string a2 = startIP[1].ToString();
                string a3 = startIP[2].ToString();
                string a4 = startIP[3].ToString();
                uint U1 = uint.Parse(a1);
                uint U2 = uint.Parse(a2);
                uint U3 = uint.Parse(a3);
                uint U4 = uint.Parse(a4);
                uint U = U1 << 24;
                U += U2 << 16;
                U += U3 << 8;
                U += U4;
                return U;
            }
            /// <summary>
            /// 数字和IP地址之间转化的算法
            /// </summary>
            /// <param name="ipAddress">传入IP地址</param>
            /// <returns></returns>
            
            public static string IntToIP(uint ipAddress)
            {
                long ui1 = ipAddress & 0xFF000000;
                ui1 = ui1 >> 24;
                long ui2 = ipAddress & 0x00FF0000;
                ui2 = ui2 >> 16;
                long ui3 = ipAddress & 0x0000FF00;
                ui3 = ui3 >> 8;
                long ui4 = ipAddress & 0x000000FF;
                string IPstr = "";
                IPstr = System.Convert.ToString(ui1) + "." + System.Convert.ToString(ui2) + "." + System.Convert.ToString(ui3) + "." + System.Convert.ToString(ui4);
                return IPstr;
            }
      

  2.   

    额,已经解决一个了
    把long ip = getIpNum("lblIp.Text");改成long ip = getIpNum(lblIp.Text);就可以了
    另外还有个问题,因为begin和end的地址在数据库里,必须把值取出来赋给隐藏的控件吗,有没有getelementbyid之类的方法,有的话怎么写呢?
      

  3.   

    begin和end当参数传递,你能传给方法就行了,  至于放哪去、怎么去都无所谓了,
      

  4.   


    能详细讲讲吗,我就是不知道怎么把这个地址传过去啊,现在能想到的办法就是先从数据库里取出来,然后赋值给一个隐藏的label,然后再去读这个label的值,有简单一点的方法吗