C#,Web系统中如何判断访问来源IP为本地(IPv4)
时间:2010-11-08 来源:JasperZhu
IP分为4段后,用256 ^ (4 - i - 1),四个值相加。数据类型应该为double,single类型当值大时精度不够。
代码

/// 根据一个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)。

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)
相关阅读 更多 +
排行榜 更多 +