Heim > Artikel > Backend-Entwicklung > Wie implementiert man eine tragbare 64-Bit-Integer-Byte-Reihenfolgefunktion in C?
Frage:
Können wir eine Standardfunktion wie htonl erhalten? das mit 64-Bit-Ganzzahlen in C funktioniert und die Konvertierung in die Netzwerk-Byte-Reihenfolge ermöglicht?
Antwort:
Während es in C keine explizit definierte Funktion wie htonll gibt Standardbibliothek ist es möglich, eine portable Implementierung zu erstellen. Hier sind zwei Ansätze:
Verwendung der dynamischen Endianness-Erkennung:
<code class="cpp">#define htonll(x) ((1 == htonl(1)) ? (x) : ((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) #define ntohll(x) ((1 == ntohl(1)) ? (x) : ((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32))</code>
Verwendung von Präprozessor-Makros :
<code class="cpp">#if __BIG_ENDIAN__ # define htonll(x) (x) # define ntohll(x) (x) #else # define htonll(x) (((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) # define ntohll(x) (((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32)) #endif</code>
Das obige ist der detaillierte Inhalt vonWie implementiert man eine tragbare 64-Bit-Integer-Byte-Reihenfolgefunktion in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!