#include <sys.types.h>
#include <netinet.in.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);
Beschreibung
Die Makros htonl(), htons(), ntohl() und ntohs() werden nur in den Adressfamilien AF_INET und AF_INET6 benötigt. htonl(), htons(), ntohl(), ntohs() setzen Bytes vom Datentyp integer oder short von der Rechner-Byte-Reihenfolge in die Netz-Byte-Reihenfolge um bzw. umgekehrt:
htonl() setzt 32-bit-Felder von Rechner- in Netz-Byte-Reihenfolge um.
htons() setzt 16-bit-Felder von Rechner- in Netz-Byte-Reihenfolge um.
ntohl() setzt 32-bit-Felder von Netz- in Rechner-Byte-Reihenfolge um.
ntohs() setzt 16-bit-Felder von Netz- in Rechner-Byte-Reihenfolge um.
Diese Makros werden meistens im Zusammenhang mit IPv4-Adressen und Portnummern verwendet, wie sie z.B. von der Funktion gethostbyname() geliefert werden (siehe Abschnitt "gethostbyaddr(), gethostbyname() - Informationen über Rechnernamen und -adressen abfragen").
Für IPv6-Adressen hat man sich nach RFC 2553 für die garantierte Netz-Byte-Reihenfolge entschieden. Deshalb werden für die Adressfamilie AF_INET6 nur die 16-bit-Byteorder-Makros für die Portnummer benötigt.
Die Makros werden nur an Systemen benötigt, an denen Rechner- und Netz-Byte-Reihenfolge unterschiedlich ist. Da im BS2000 Rechner-Byte-Reihenfolge und Netz-Byte-Reihenfolge identisch sind, werden die Makros in der Include-Datei <netinet.in.h> als Null-Makros (Makros ohne Funktion) bereitgestellt.
Für die Erstellung portabler Programme ist die Verwendung der Byteorder-Makros jedoch dringend zu empfehlen.
Returnwert
htonl() und htons() liefern den in die Netz-Byte-Reihenfolge konvertierten Wert des Eingabeparameters zurück.
ntohl() und ntohs() liefern den in die Rechner-Byte-Reihenfolge konvertierten Wert des Eingabeparameters zurück.
Siehe auch
gethostbyaddr(), gethostbyname(), getservbyname()