Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiere ich 64-Bit-Ganzzahlen in C über ntohl() hinaus?

Wie konvertiere ich 64-Bit-Ganzzahlen in C über ntohl() hinaus?

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 11:27:27407Durchsuche

How to Convert 64-Bit Integers in C   Beyond ntohl()?

64-Bit-Ganzzahlkonvertierung in C: Jenseits von ntohl()

Die Funktion htonl() ist, wie in der Dokumentation vorgeschlagen, begrenzt in 32-Bit-Integer-Konvertierung. In Situationen, in denen Sie jedoch eine 64-Bit-Konvertierung benötigen, stehen mehrere Optionen zur Verfügung.

Standardbibliotheksfunktionen

Für Linux (glibc >= 2.9) und FreeBSD Mit der Funktion htobe64() können 64-Bit-Ganzzahlen von Big Endian in Little Endian konvertiert werden. Diese Funktion ist Teil der Standard-C-Bibliothek.

Union-basierter Ansatz

Alternativ können Sie eine Union verwenden, um zwischen 64-Bit-Ganzzahlen und 8-Byte-Ganzzahlen zu konvertieren Zeichenarrays. Bei diesem Ansatz werden die Bytes für Big-Endian-Plattformen manuell ausgetauscht.

Präprozessormakros

Um plattformspezifische Unterschiede auszublenden und einen einheitlichen Ansatz bereitzustellen, können Sie Folgendes verwenden Präprozessorcode:

<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>

Dieser Code stellt Makros im Linux/FreeBSD-Stil unter Linux, OpenBSD, FreeBSD und NetBSD bereit.

Beispielverwendung

Um die Verwendung des empfohlenen Ansatzes zu demonstrieren, betrachten Sie den folgenden Code:

<code class="cpp">#include <stdint.h>    // For 'uint64_t'

int main() {
  uint64_t host_int = 123;
  uint64_t big_endian;

  big_endian = htobe64(host_int);
  host_int = be64toh(big_endian);

  return 0;
}</code>

Dieser Code konvertiert eine 64-Bit-Ganzzahl, host_int, von Little Endian in Big Endian und zurück, wobei ihr Wert effektiv erhalten bleibt.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich 64-Bit-Ganzzahlen in C über ntohl() hinaus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn