Wie konvertieren Sie auf Architektur unabhängige Weise mit C oder C ++ in eine Architektur-unabhängige Art und Weise? [gC++

Programme in C++. Entwicklerforum
Anonymous
 Wie konvertieren Sie auf Architektur unabhängige Weise mit C oder C ++ in eine Architektur-unabhängige Art und Weise? [g

Post by Anonymous »

normalerweise beim Schreiben einer Netzwerk-/Socket -Schnittstelle in C würde man die Funktionsfamilie von NTOH und hton verwenden, um zwischen der Reihenfolge der Host -Byte -Byte- und Netzwerk -Byte -Reihenfolge zu konvertieren, die Big Endian ist. < /p>
Wenn jemand die Regeln brechen und eine Anwendung schreiben wollte, die mit Daten in wenig endianischer Reihenfolge anstelle von Netzwerk -Byte -Reihenfolge gesendet wird, wie würde man das machen? < /p>
Meine anfänglichen Gedanken sind jede Anwendung auf beiden Seiten der Verbindung müssten erkennen, welche Byte -Bestellung sie kompiliert worden war, und verwenden diese Informationen, um eine benutzerdefinierte Funktion aufzurufen, die wahrscheinlich eine Intrinsische wie eine der der Varianten von Byteswap (eine GCC /MSVC -Funktion, die einen Assemblerbefehl einbindet). < /p>
Gibt es eine bessere Alternative? p> Um diese Frage weiter zu klären.
  • Es werden einige Daten vorhanden sein, die aus einem Puffer gesendet /empfangen werden müssen. < /li>
    Diese Daten können eine Struktur < /Code sein > Auf dem Stapel, irgendwo auf dem Haufen, was auch immer es egal ist. Es enthält einen Typ wie int64_t . LI> Wir verwenden die HTON Funktionsfamilie, um in eine Richtung zu konvertieren, und NTOH Familie, um in umgekehrte Richtung zu konvertieren Diese Funktionen, bevor diese Daten mit send oder wir die umgekehrte Operation mit recv
Der Punkt ausführen, können Sie können Schreiben Sie den Quellcode auf unabhängige Archetektur -Weise. Es spielt keine Rolle, ob die Zielmaschine Big-Endian oder Little-Endian ist, solange Sie das Programm für die richtige Zielarchitektur kompilieren, wird Hton und ntoh das Richtige tun. (Ob dies eine Byte -Tauschoperation oder eine Noop ist.) < /P>
, um auf die ursprüngliche Frage zurückzukehren, ist ich interessiert zu wissen, ob es eine vernünftige Möglichkeit gibt, eine alternative Familie zu schreiben von Funktionen zu ntoh und hton , die den anderen alternativen Vorgang ausführen. htonxxx wandelt Big Endian in Little Endian um und ntohxxx Little Endian in Big Endian konvertiert. Htonxxx ist eine Noop, und ntohxxx ist eine Noop.
Dies unterscheidet Kurs.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post