如何将string转换为IP地址,反之亦然

我怎么能转换一个stringipAddress(struct in_addr),反之亦然? 以及如何打开unsigned long ipAddress? 谢谢

如果您需要,可以使用inet_ntop()inet_pton() 。 不要使用inet_ntoa(), inet_aton()和类似的,因为它们被弃用,不支持ipv6。

这里有一个很好的指导,有很多例子。

 // IPv4 demo of inet_ntop() and inet_pton() struct sockaddr_in sa; char str[INET_ADDRSTRLEN]; // store this IP address in sa: inet_pton(AF_INET, "192.0.2.33", &(sa.sin_addr)); // now get it back and print it inet_ntop(AF_INET, &(sa.sin_addr), str, INET_ADDRSTRLEN); printf("%s\n", str); // prints "192.0.2.33" 

我不确定我是否正确理解了这个问题。

无论如何,你是否在寻找这个:

 std::string ip ="192.168.1.54"; std::stringstream s(ip); int a,b,c,d; //to store the 4 ints char ch; //to temporarily store the '.' s >> a >> ch >> b >> ch >> c >> ch >> d; std::cout << a << " " << b << " " << c << " "<< d; 

输出:

 192 168 1 54 

我能够将string转换为DWORD,并返回这个代码:

 char strAddr[] = "127.0.0.1" DWORD ip = inet_addr(strAddr); // ip contains 16777343 [0x0100007f in hex] struct in_addr paddr; paddr.S_un.S_addr = ip; char *strAdd2 = inet_ntoa(paddr); // strAdd2 contains the same string as strAdd 

我在一个旧的MFC代码的维护项目中工作,所以转换不推荐的函数调用是不适用的。

inet_ntoa()in_addr转换为string:

inet_ntoa函数将(Ipv4)Internetnetworking地址转换为Internet标准点分十进制格式的ASCIIstring。

inet_addr()做相反的工作

inet_addr函数将包含IPv4点分十进制地址的string转换为IN_ADDR结构的正确地址

PS这是第一个search结果“in_addr to string”!

将string转换为in-addr:

 in_addr maskAddr; inet_aton(netMaskStr, &maskAddr); 

将in_addr转换为string:

 char saddr[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &inaddr, saddr, INET_ADDRSTRLEN); 

这个例子展示了如何将string转换为ip,反之亦然:

 struct sockaddr_in sa; char ip_saver[INET_ADDRSTRLEN]; // store this IP address in sa: inet_pton(AF_INET, "192.0.1.10", &(sa.sin_addr)); // now get it back sprintf(ip_saver, "%s", sa.sin_addr)); // prints "192.0.2.10" printf("%s\n", ip_saver);