如何将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);