c++ - significa - subredes
¿Cómo convertir una cadena de formato de dirección IP estándar a hexadecimal y larga? (5)
Creo que te puedes encontrar con un problema de orden de bytes. Desde la página man:
Todas las direcciones de Internet se devuelven en orden de red (bytes ordenados de izquierda a derecha). Todos los números de red y las partes de direcciones locales se devuelven como valores enteros de orden de bytes de máquina.
¿Alguien sabe cómo obtener la dirección IP en decimal o hex desde la cadena de formato de dirección IP estándar ("xxx.xxx.xxx.xxx")?
Intenté usar la función inet_addr () pero no obtuve el resultado correcto.
Lo probé en "84.52.184.224"
la función devolvió 3770168404 que no es correcta (el resultado correcto es 1412741344).
¡Gracias!
El resultado devuelto es correcto, los bytes se ordenan en orden de bytes de red
84 => 0x54
52 => 0x34
184 => 0xb8
224 => 0xe0
0xe0b83454 => 3770168404
Las funciones htonl, htons, ntohl, ntohs se pueden usar para convertir órdenes de bytes locales y de red.
Revise cuidadosamente el siguiente enlace:
http: // msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx
Acaba de invertir los bytes de lo que esperaba: están en orden de bytes de red
3770168404 = 0xE0 B8 34 54 network byte order
| |
/ /
/ /
/ /
/ /
//
/ /
/ /
/ /
| |
1412741344 = 0x54 34 B8 E0 machine order
Puede usar ntohl () convertir de orden de red a orden de máquina.