Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Byteorder-Makros - Byte-Reihenfolgen umsetzen

&pagelevel(4)&pagelevel

#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()