[問題] C++ 處理 IPv4 的二三事

看板C_and_CPP (C/C++)作者 (小乖)時間16年前 (2010/03/10 16:34), 編輯推噓3(302)
留言5則, 2人參與, 最新討論串1/3 (看更多)
板上各位大大好: 我現在目前在寫一個網路查詢的程式,遇到些處理 IP 上的問題, 想請教大家的意見。 目前開發環境在 windows XP , 用的是 wxWidgets 的 C++ Library 我想要處理 ========================================================== eq. 192.168.8.0 ~ 192.168.8.254 範圍內的 IP // test 192.168.8.0 連線狀態 // test 192.168.8.1 連線狀態 ... // test 192.168.8.254 連線狀態 ========================================================== 最直覺的想法是將 IP 包成一個 class,然後用迴圈處理。 eq. class IP{ std::string ip; public: IP(std::string my_ip); IP& operator++(); bool operator< (const IP& other) const; std::string get(); }; IP ip_start("192.168.8.0"); IP ip_end("192.168.8.254"); for(;ip_start<ip_end; ++ip_start) { // 測試連線 testConnect(ip_start); } 我的問題是,關於 operator++ 是否有比較好的實作方式? 或是有現成的類似 class 可以用 (MFC 的類別我還沒有 survey,我會在查看看) 我在網路上找到的 #include <winsock.h> unsigned long inet_addr( __in const char *cp ); 函式 不符合我需求,我想要的是 ip_start++ 後 (原本是 192.168.8.0) 會變成 192.168.8.1。 我自己實作的方式是用 ip[4] 的方式 parse 字串將每個整數存起來 加一後 (若是遇到 255 要考慮進位) 在轉成字串 ... 看了之後覺得比董卓還醜,不忍目睹,因此想問各位有甚麼好想法 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.177.202

03/10 16:38, , 1F
用32位元整數, 一次搞定
03/10 16:38, 1F

03/10 16:40, , 2F
11000000 10101000 00001000 00000000 到
03/10 16:40, 2F

03/10 16:41, , 3F
11000000 10101000 00001000 11111110
03/10 16:41, 3F

03/10 16:43, , 4F
題外話, ...255的subnet, ...0應該是name不用test吧@_@"
03/10 16:43, 4F

03/10 16:47, , 5F
WIN 32 API 的 IN_ADDR 結構跟相關函式可以考慮一下
03/10 16:47, 5F
文章代碼(AID): #1Bbrcknn (C_and_CPP)
文章代碼(AID): #1Bbrcknn (C_and_CPP)