看板 C_and_CPP 關於我們 聯絡資訊
之前的發問文 <<C++ 處理 IPv4 的二三事>> 感謝版友的回答,我寫了一個包裝 IPv4 的 class 若是有遇到類似需要對一個 IP 範圍作迴圈處理 (eq.IP scan) 此 class 可以很方便的處理。 此 class 目前是 win32 平台上的版本,在 linux 上只要把 header file 改掉就可 code: http://codepad.org/WGXlCBgr ===================================================== #include <iostream> using namespace std; #include <winsock.h> struct bad_Ipv4 : std::bad_cast { const char* what() const throw() { return "bad Ipv4 format"; } }; class IP { IN_ADDR ip; public: IP(std::string my_ip= "0.0.0.0") { if( (ip.s_addr = inet_addr(my_ip.c_str()) ) == INADDR_NONE ) throw bad_Ipv4(); } std::string get() const{ return inet_ntoa(ip); } IP& operator++(){ ip.s_addr = htonl ( ntohl(ip.s_addr) + 1 ); return *this; } const IP operator++(int){ IP oldIp = *this; ++(*this); return oldIp; } bool operator < (const IP& other) const { return ntohl(ip.s_addr) < ntohl( inet_addr(other.get().c_str() ) ); } bool operator == (const IP& other) const { return ip.s_addr == inet_addr(other.get().c_str()); } bool operator !=(const IP& other)const { return !(*this == other); } }; // 測試檔案 int main() { IP ip_start("192.168.8.1"); IP ip_end("192.168.8.254"); for(;ip_start!=ip_end; ++ip_start) cout << ip_start.get() << endl; } ==================================================================== -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.177.202 ※ 編輯: spider391 來自: 61.216.177.202 (03/11 11:55)