Litblue.net

…游荡在黑夜的灵魂…

ip地址的一个小秘密

一个众所周知的秘密
形如0.0.1.1的IP地址
可以表示为一个整形的257
在cmd中ping 257 和ping 0.0.1.1是等效的
那么257这个值是怎么得来的呢?
聪明的你肯定想到了是1*256 + 1
是的 把IP转换成二进制就能很好地理解了
我们点分十进制的表示法中,把32位的IP地址分隔成了四段,每八位转换成十进制.
如00000000 00000000 00000001 00000001表示成0.0.1.1
那么把0.0.1.1还原成整数就是把00000000 00000000 00000001 00000001转换成十进制的整数
很显然ip1.ip2.ip3.ip4 这样的IP中 ip3的真实值应该是ip3的值左移了8位
而二进制 1 00000000的值便是256

C# 中的具体算法如下
[code] public static uint IPToInt ( string ip )
{
IPAddress IP;
uint ipvalue = 0;
//若为合法的IP地址,则进行转换
if (IPAddress.TryParse(ip, out IP))
{
String[] _ip = IP.ToString().Split('.');
for (int i = 0; i < 4; i++)
{
if (i != 3)
{
ipvalue = ipvalue +(uint)System.Convert.ToUInt32(_ip[i]) << 8;
}
}
ipvalue += (uint)System.Convert.ToUInt32(_ip[3]);
}
return ipvalue;
}[/code]

这就解决了IP的排序问题
如果以字符串来对IP排序
202.0.0.0会排在59.0.0.0前面
转换成整数后就能得到正确的排序啦

posted by blues in 技术相关 and have No Comments

Place your comment

Please fill your data and comment below.
Name
Email
Website
Your comment