Ho eseguito il seguente programma su macchina little-endian [LE] [Linux, processore Intel]. Non riesco a spiegare le 3 uscite nel seguente frammento di codice. Poiché la macchina è LE, il valore di a
viene memorizzato come 0x78563412
. Durante la stampa, sta visualizzando il suo valore reale. Dal momento che è una macchina LE, mi aspetto che ntohl()
diventi un no-op e visualizzi 0x78563412
, che sta facendo. Tuttavia, mi aspetto 0x12345678
per la seconda dichiarazione di stampa contenente htonl()
. Qualcuno può aiutarmi a capire perché sono uguali?Stesso output per htonl() e ntohl() su un numero intero
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;
}
uscita:
Original - 0x12345678
Network - 0x78563412
Host - 0x78563412
Come @Alok menzionato di seguito, mi aspettavo che il seguente comportamento sia sempre valido: 'x == htonl (ntohl (x))'. Ma questo non sta accadendo e la tua spiegazione è stata molto utile. – Bhaskar
@Bhaskar: anche il punto di Brian Roach è importante: non hai mai calcolato 'htonl (ntohl (a))'. Hai calcolato 'htonl (a)' e 'ntohl (a)'. –
grazie mille! Grande spiegazione – Skully