Heim >Backend-Entwicklung >C++ >Wie konvertiere ich 64-Bit-Werte zwischen Netzwerk- und Host-Bytereihenfolge in C?
ntohl()-Erweiterung für 64-Bit-Werte
Die C-Funktion ntohl() wird normalerweise zum Konvertieren von 32-Bit-Werten aus dem Netzwerk verwendet Byte-Reihenfolge zur Host-Byte-Reihenfolge. In bestimmten Szenarien ist jedoch möglicherweise ein ähnlicher Vorgang für 64-Bit-Werte erforderlich.
Lösung
Die Manpages für htonl() weisen auf die Beschränkung auf 32-Bit-Werte hin. Bitwerte, da unsigned long auf bestimmten Plattformen 32 Bit groß ist. Um den Bedarf an 64-Bit-Konvertierung zu decken, können mehrere Ansätze untersucht werden:
Standardbibliothek:
Implementierungsvorschläge:
Präprozessor-Magie:
<code class="cpp">#if defined(__linux__) # include <endian.h> #elif defined(__FreeBSD__) || defined(__NetBSD__) # include <sys/endian.h> #elif defined(__OpenBSD__) # include <sys/types.h> # define be16toh(x) betoh16(x) # define be32toh(x) betoh32(x) # define be64toh(x) betoh64(x) #endif</code>
Verwendungsbeispiel:
Mithilfe der Präprozessor-Magie kann die Konvertierung mithilfe des folgenden Codeausschnitts durchgeführt werden:
<code class="cpp"> #include <stdint.h> uint64_t host_int = 123; uint64_t big_endian; big_endian = htobe64( host_int ); host_int = be64toh( big_endian );</code>
Dieser Ansatz stellt eine Standard-C-Bibliothek-ähnliche Schnittstelle bereit, die über mehrere Plattformen hinweg kompatibel ist.
Das obige ist der detaillierte Inhalt vonWie konvertiere ich 64-Bit-Werte zwischen Netzwerk- und Host-Bytereihenfolge in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!