DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

当时面试上机的想法是,直接使用uint32_t变量来存ip地址,遍历字符串带".",然后去值,利用移位来将这个值填到uint32_t对应的位置上。这样的麻烦之处在于:

1,遍历字符串,还得记录每个"."出现的位置;

2,移位操作;

 

而最巧妙的做法是,利用一个uint8_t的数组(长度为4)和sscanf函数进行取ip字符串对应的值:

uint32_t ip2long(char* ip) {

uint8_t addr[4] = {0};

sscanf(ip, "%d.%d.%d.%d", &addr[0],&addr[1],&addr[2],&addr[3]);

 

return *(uint32_t*)addr;

}

 

5行代码就搞掂,而我上机时候写的应该是接近20行了吧?而且循环调用atoi()函数,无论是性能和简洁程度都无法比。

 

教训是,在看一些优秀的代码时,不能走马观花!努力去思考当时作者的想法。

posted on 2018-09-15 09:48  DoubleLi  阅读(2453)  评论(0编辑  收藏  举报