Ich lief das folgende Programm auf Little-Endian [LE] -Maschine [Linux, Intel-Prozessor]. Ich bin nicht in der Lage, die 3 Ausgänge im untenstehenden Codeschnipsel zu erklären. Da die Maschine LE ist, wird der Wert a
als 0x78563412
gespeichert. Beim Drucken wird der tatsächliche Wert angezeigt. Da es ein LE-Gerät ist, erwarte ich ntohl()
zu einem No-Op- und Display 0x78563412
, was es tut. Ich erwarte jedoch 0x12345678
für die zweite Druckanweisung, die htonl()
enthält. Kann mir bitte jemand helfen zu verstehen, warum sie gleich sind?Gleiche Ausgabe für Htonl() und Ntohl() auf einer ganzen Zahl
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;
}
Ausgang:
Original - 0x12345678
Network - 0x78563412
Host - 0x78563412
Als @Alok unten erwähnt, erwartete ich, dass das folgende Verhalten immer wahr sein wird: 'x == htonl (ntohl (x))'. Aber das passiert nicht und Ihre Erklärung war sehr hilfreich. – Bhaskar
@Bhaskar: Brian Roachs Punkt ist auch wichtig, dann: du hast nie 'htonl (ntohl (a))' berechnet. Sie haben 'htonl (a)' und 'ntohl (a)' berechnet. –
vielen Dank! Große Erklärung – Skully