Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiere ich 64-Bit-Ganzzahlen von Big Endian in Little Endian in C?

Wie konvertiere ich 64-Bit-Ganzzahlen von Big Endian in Little Endian in C?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 07:51:02968Durchsuche

How to Convert 64-Bit Integers from Big Endian to 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

  • Linux und FreeBSD: htobe64 und be64toh sind in < definiert ;endian.h> für die 64-Bit-Integer-Konvertierung.
  • OpenBSD: Benutzerdefinierte Makros be16toh, be32toh und be64toh sind in verfügbar. für die Konvertierung der Bytereihenfolge.

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!

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