c++ string struct ip-address in-addr

c++ - Cómo convertir cadena a dirección IP y viceversa



string struct (6)

Este ejemplo muestra cómo convertir de cadena a ip y viceversa:

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);

¿cómo puedo convertir una cadena ipAddress (struct in_addr) y viceversa? y ¿cómo convierto inigned long ipAddress? Gracias


No estoy seguro si entendí la pregunta correctamente.

De todos modos, estás buscando esto:

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;

Output:

192 168 1 54


Para convertir cadena a in-addr:

in_addr maskAddr; inet_aton(netMaskStr, &maskAddr);

Para convertir in_addr en cadena:

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


Pude convertir cadenas a DWORD y viceversa con este código:

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

Estoy trabajando en un proyecto de mantenimiento del código MFC antiguo, por lo que la conversión de llamadas a funciones obsoletas no es aplicable.


inet_ntoa() convierte un in_addr en una cadena:

La función inet_ntoa convierte una dirección de red de Internet (Ipv4) en una cadena ASCII en el formato estándar con puntos de puntos de Internet.

inet_addr() hace el trabajo inverso

La función inet_addr convierte una cadena que contiene una dirección decimal con puntos IPv4 en una dirección adecuada para la estructura IN_ADDR

PD este es el primer resultado de googlear "in_addr to string"!


Use inet_ntop() y inet_pton() si lo necesita de otra forma. No use inet_ntoa(), inet_aton() y similares ya que están en desuso y no son compatibles con ipv6.

Aquí hay una buena guide con bastantes ejemplos.

// 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"