文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C#,Web系统中如何判断访问来源IP为本地(IPv4)

C#,Web系统中如何判断访问来源IP为本地(IPv4)

时间:2010-11-08  来源:JasperZhu

IP分为4段后,用256 ^ (4 - i - 1),四个值相加。数据类型应该为double,single类型当值大时精度不够。

代码

代码         /// <summary>
        /// 根据一个IPV4地址生成一个IP值,如果地址错误,返回-1
        /// 需要用double,如果用single后面的位数不准确,变成0了
        /// by JasperZhu 20101108
        /// </summary>
        /// <param name="sIPAddress"></param>
        /// <returns></returns>
        public static double GetIPFloatValue(string sIPAddress)
        {
            double fIPValue = -1;

            if (sIPAddress.Trim() == string.Empty) return -1;

            string[] arrIPSec = sIPAddress.Split('.');

            if (arrIPSec.Length != 4)
            {
                return -1;
            }
            else
            {
                for (int i = 0; i < arrIPSec.Length; i++)
                {
                    int nowIPSec = -1;
                    try { nowIPSec = Convert.ToInt16(arrIPSec[i]); }
                    catch { }
                    if (nowIPSec != -1)
                    {
                        fIPValue += nowIPSec * System.Math.Pow(256, (4 - i - 1)); //用表达式(256 ^ (4 - i - 1))的结果是错的; 
                    }
                    else
                    {
                        return -1;
                    }
                }

                return fIPValue;
            }
        }

注意:C#中不支持直接用幂符号(^)计算表达式,应该用System.Math.Pow(x,y),如果强用计算出的是错误值。

另外,在SQL中也不支持幂符号(^)计算表达式,应该用power(x,y)。

代码 --error result
select 61*(256^3)+50*(256^2)+136*256+182
--1026721974
select 61*(power(256,3))+50*power(256,2)+136*256+182 
--值较大时
select (cast(192 as float)*power(256,3) +168*power(256,2)+255*256+255)


 

相关阅读 更多 +
排行榜 更多 +
突围血战 v5.0.0 安卓版

突围血战 v5.0.0 安卓版

休闲益智 下载
无限都市乱斗 v2.0.3 安卓版

无限都市乱斗 v2.0.3 安卓版

飞行射击 下载
无限都市乱斗 v2.0.3 安卓版

无限都市乱斗 v2.0.3 安卓版

飞行射击 下载