Heim > Artikel > Backend-Entwicklung > Wie konvertiere ich 64-Bit-Ganzzahlen von Big Endian in Little Endian in C?
64-Bit-Ganzzahlkonvertierung von Big Endian nach Little Endian in C
Die Standard-C-Funktion ntohl() konvertiert 32-Bit-Ganzzahlen von Netzwerk-Byte-Reihenfolge (Big-Endian) in Host-Byte-Reihenfolge (Little-Endian) und umgekehrt. Auf einigen Plattformen besteht jedoch die Notwendigkeit, 64-Bit-Ganzzahlen (insbesondere vorzeichenlose Long-Long-Werte) zu konvertieren.
Leider bietet der C-Standard keine dedizierte Funktion für die 64-Bit-Ganzzahlkonvertierung. Es gibt jedoch plattformspezifische Implementierungen.
Plattformspezifische Lösungen
Codebeispiel
Der folgende Code kann zum Konvertieren von 64-Bit-Ganzzahlen auf verschiedenen Plattformen verwendet werden:
<code class="cpp">#include <stdint.h> // For 'uint64_t' #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 int main() { uint64_t host_int = 123; uint64_t big_endian; // Convert to big-endian big_endian = htobe64(host_int); // Convert back to host byte order host_int = be64toh(big_endian); return 0; }</code>
In diesem Beispiel wird eine 64-Bit-Ganzzahlkonvertierung unter Linux, FreeBSD und OpenBSD unter Verwendung der entsprechenden plattformspezifischen Funktionen durchgeführt.
Das obige ist der detaillierte Inhalt vonWie konvertiere ich 64-Bit-Ganzzahlen von Big Endian in Little Endian in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!