將字符串表示的IP地址轉變為整形表示


當時面試上機的想法是,直接使用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()函數,無論是性能和簡潔程度都無法比。

 

教訓是,在看一些優秀的代碼時,不能走馬觀花!努力去思考當時作者的想法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM