关于ip地址的排序,统计出现频率

现在给你一些ip地址,要求你将其排序,或者统计每个ip地址出现的频率,例如下面的ip:
10.254.82.126 
10.85.124.135 
10.254.82.126 
10.254.82.126 
10.1.82.125 
10.85.124.135 
10.254.82.126 
10.254.82.126 

   ip地址一般是字符串型的,直接对字符串排序肯定不方便,要是做个预处理就比较好了,这里可以将其转换为整数:
IP 0.0.0.0 正好对应 4* 8(bits) = 32位(1个int)
可以采用256进制的方法,将其转换为一个无符号整数,因为ip地址最大为255.255.255.255,无符号整数表达的范围为2^32-1,所以ip地址转化为unsigned int肯定不会溢出,如10.254.82.126,可以采用如下的转换:10*256^3+254*256^2+82*256+126,这样对整数排序还是很方便的。。。
IP 0.0.0.0 正好对应 4* 8(bits) = 32位(1个int)

另外也可以这样写,
const char *ip = "127.0.0.1";
unsigned int a1,a2,a3,a4,result = 0;
sscanf(ip,"%d.%d.%d.%d",&a1,&a2,&a3,&a4);
result |= a1 << 24;
result |= a2 << 16;
result |= a3 << 8;
result |= a4;
result和上面算出来的是一致的。

作者: wsnhyjj   发布时间: 2010-10-23