htons, ntohs, htonl, ntohl

Wie sieht's aus?

#include <sys/param.h>
u_long htonl(u_long hostlong);
u_short htons(u_short hostshort);
u_long ntohl(u_long netlong);
u_short ntohs(u_short netshort);
    

Was tut's?

Es wandelt mehrbytige Werte von Host- ind Network-Byte-Order bzw. umgekehrt um.

Was tut's???

Es hängt von der Architektur (Prozessor) ab, in welchem Format ganzzahlige Werte gespeichert werden, die mehrere Byte umfassen. Dies kann in Little Endian oder in Big Endian passieren. Letzteres ist die Methode, die im Zusammenhang mit dem Internet verwendet wird (weil es "logischer" erscheint), ersteres ist die Methode, die x86 CPUs (und andere) verwenden.

Nun ist Network-Byte-Order immer Big Endian, aber Host-Byte-Order ist die Art und Weise, wie es lokal gehandhabt wird. Das kann das gleiche sein, muß aber, wie oben beschrieben, nicht. Damit man portablen Code schreiben kann, gibt es nun diese Makros. Sie wandeln die Werte um, wenn es nötig ist, oder tun nichts, wenn nichts getan werden muß.

Will man also portablen Code schreiben, verwendet man einfach immer diese Aufrufe. Anwendungen gab's schon in diversen Beispielen, also begnüge ich mich an dieser Stelle nur mit der Beschreibung.