Ejecuté el siguiente programa en la máquina little-endian [LE] [Linux, procesador Intel]. No puedo explicar las 3 salidas en el siguiente fragmento de código. Como la máquina es LE, el valor de a
se almacena como 0x78563412
. Al imprimir, muestra su valor real. Como se trata de una máquina LE, espero que ntohl()
no funcione y muestre 0x78563412
, lo que está haciendo. Sin embargo, espero 0x12345678
para la segunda declaración de impresión que contiene htonl()
. ¿Alguien puede ayudarme a entender por qué son lo mismo?Mismo resultado para htonl() y ntohl() en un entero
int main()
{
int a = 0x12345678;
printf("Original - 0x%x\n", (a));
printf("Network - 0x%x\n", htonl(a));
printf("Host - 0x%x\n", ntohl(a));
return 0;
}
Salida:
Original - 0x12345678
Network - 0x78563412
Host - 0x78563412
Como @Alok mencionan a continuación, que estaba esperando el siguiente comportamiento siempre será verdad: 'x == htonl (ntohl (x))'. Pero esto no está sucediendo y tu explicación fue muy útil. – Bhaskar
@Bhaskar: punto de Brian Roach también es importante, entonces: nunca se ha calculado 'htonl (ntohl (a))'. Calculó 'htonl (a)' y 'ntohl (a)'. –
muchas gracias! Gran explicación – Skully