Chinaunix首页 | 论坛 | 博客
  • 博客访问: 340486
  • 博文数量: 88
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 885
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-21 14:50
文章分类

全部博文(88)

文章存档

2010年(88)

我的朋友

分类: C/C++

2010-10-23 19:56:35

现在给你一些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和上面算出来的是一致的。
阅读(1792) | 评论(0) | 转发(0) |
0

上一篇:支付宝offer

下一篇:Linux内核进程切换

给主人留下些什么吧!~~