Heim > Backend-Entwicklung > C++ > Hauptteil

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

Linda Hamilton
Freigeben: 2024-10-30 07:51:02
Original
903 Leute haben es durchsucht

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!