2011-03-16 23 views

Respuesta

89

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

Aquí hay un buen guide con algunos 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" 
+0

¿Qué debo hacer para usarlos en Windows? ¿Qué debo incluir? – Safari

+4

Si usa winsock, entonces InetNtop e InetPton en Windows Vista y posterior. Archivo de encabezado Ws2tcpip.h. Un consejo es mirar ejemplos en msdn. – Milan

+0

uso windows xp. – Safari

3

inet_ntoa() convierte una cadena a in_addr:

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

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

PS esto el primer resultado googlear "in_addr to string"!

+5

Esas funciones están en desuso y no debe ser utilizado. – Milan

+1

@Milan OK. Aunque el OP usa in_addr struct que trata con ipv4 – CharlesB

+0

¿Qué debo hacer para usarlos en Windows? ¿Qué debo incluir? – Safari

4

No estoy seguro de haber entendido la pregunta correctamente.

De todos modos, ¿Está buscando para ello:

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 
1

Convertir cadena a in-addr:

in_addr maskAddr; 
inet_aton(netMaskStr, &maskAddr); 

Convertir in_addr de cadena:

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

que fue capaz de convertir la serie en DWORD y la espalda 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 de código MFC de edad, por lo que la conversión de funciones obsoletas llama no es aplicable.

0

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