关于ip地址的排序,统计出现频率
时间:2010-10-23 来源:wsnhyjj
现在给你一些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和上面算出来的是一致的。
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和上面算出来的是一致的。
相关阅读 更多 +