GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Big-Endian- und Little-Endian-Unterstützung für die Byte-Reihenfolge

Auf beiden Plattformen haben Sie

für short (16bit):htons() und ntohs()

für long (32bit):htonl() und ntohl()

Die fehlende htonll() und ntohll() für long long (64bit) könnte leicht aus diesen beiden erstellt werden. Sehen Sie sich zum Beispiel diese Implementierung an.

Update-0:

Für das oben verlinkte Beispiel erwähnt Simon Richter in einem Kommentar, dass es nicht unbedingt funktionieren muss. Der Grund dafür ist:Der Compiler fügt möglicherweise irgendwo in den verwendeten Unions zusätzliche Bytes ein. Um dies zu umgehen, müssen die Gewerkschaften gepackt werden. Letzteres kann zu Leistungseinbußen führen.

Hier ist also ein weiterer ausfallsicherer Ansatz zum Erstellen von *ll Funktionen:https://stackoverflow.com/a/955980/694576

Update-0.1:

Aus dem Kommentar von bames53 tendiere ich zu dem Schluss, dass das oben verlinkte 1. Beispiel nicht mit C++, sondern nur mit C verwendet werden soll.

Update-1:

Um die Funktionalität des *ll zu erreichen unter Linux funktioniert, könnte dieser Ansatz der 'beste' sein.


Nicht die gleichen Namen, aber die gleiche Funktionalität existiert.

BEARBEITEN:Archivierter Link -> https://web.archive.org/web/20151207075029/http://msdn.microsoft.com/en-us/library/a3140177(v=vs.80).aspx

_byteswap_uint64, _byteswap_ulong, _byteswap_ushort


htons und htonl (und ähnliche Makros) sind gut, wenn Sie darauf bestehen, mit Byte-Sex umzugehen.

Es ist jedoch viel besser, das Problem zu umgehen, indem Sie Ihre Daten in ASCII oder ähnlichem ausgeben. Es benötigt etwas mehr Platz und überträgt etwas langsamer über das Netz, aber die Einfachheit und Zukunftssicherheit sind es wert.

Eine andere Möglichkeit besteht darin, Ihre ints und shorts numerisch zu zerlegen. Also Sie &0xff und teilen Sie wiederholt durch 256. Dies ergibt ein einziges Format auf allen Architekturen. Aber ASCII hat immer noch den Vorteil, weil es einfacher zu debuggen ist.


Linux
  1. Tipps und Tricks für curl und wget

  2. Profi-Tipp:For-, While- und Until-Schleifen

  3. Getopt, Getopts oder manuelles Parsing – was soll ich verwenden, wenn ich sowohl kurze als auch lange Optionen unterstützen möchte?

  4. Die Herausforderung und das Versprechen von Big Data

  5. Beispiele für Bash-For- und While-Schleifen

Tmux, Term und 256-Farben-Unterstützung?

Linux – Allgemeine Linux-Unterstützung für Ipv6 Bereit?

Eine große Änderung für Samba in Ubuntu 22.04 und wie man sie umgeht

Medleytext – Eine intuitive und stilvolle Notizen-App für Programmierer

Code für Malloc und kostenlos

Ribbon-Schnittstelle für GTK und Qt