转载地址:http://hi.baidu.com/jordan51341/item/f827eb66a2e2b02568105ba3
在进行IP地址查询的时候 往往需要比较这个IP地址是否是属于某个IP段中
如: 202.202.202.100 在 202.202.1.1 -- 202.202.255.255 范围内
方法:
1. 将IP地址每段转换为数字 a=202, b=202, c=202 , d=100
2. 通过移位操作 再或操作 将四个整数合成一个整数
num= (a << 24) | (b<< 16) | (c << 8) | d
3.同样将IP区间的两个地址也这样转换为一个32位整数
begin= (202 << 24) | (202<< 16) | (1 << 8) | 1
end= (202 << 24) | (202<< 16) | (255<< 8) | 255
4.直接比较 begin <= num <= end 就可以得出是否属于该IP段
5.将这样的32位整数转换为IP地址 方法同理
a = (IpNumber & 4278190080) >> 24;
b = (IpNumber & 16711680) >> 16;
c = (IpNumber & 65280) >> 8;
d = IpNumber & 255;
IP= a.ToString() + "." + b.ToString() + "." + c.ToString() + "." + d.ToString()
----------------------------------------------------------------------------------------------------------------------------
附上:此功能的类(C#)
#region 转换IP地址为整型
/// <summary>
/// 转换IP地址为整型
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public ulong IP2ulong(string ipAddress)
{
byte[] bytes = IPAddress.Parse(ipAddress).GetAddressBytes();
ulong ret = 0;
foreach(byte b in bytes)
{
ret <<= 8;
ret |= b;
}
return ret;
}
#endregion