char => Little Endian <-> Big Endian ???



  • Hallo Leute,

    ich habe den Wunsch aus ANSI-C Programmen (MS VC++ 6) verschiedenste
    "char[4]" Variablen und Array's über ein lokales Netzwerk zu schicken, wobei
    verschiedene Rechner-Architekturen und Rechner-Betriebssysteme miteinander
    kommunizieren.
    Ist jemandem vielleicht eine Routine unter ANSI-C oder auch unter MS VC++ 6
    bekannt, die für "char" die Byte-Order von "Little-Endian" zu "Big-Endian" und
    umgekehrt durchführen kann ???
    Z.Zt. schleife ich meine Daten immer vorher durch eine "for" Schleife.

    MFG



  • Hi,

    htonl und Co. Ist aber kein Standard, aber dennoch sowohl für Windows, Mac als auch Linux vorhanden.



  • ??? Wieso für einen Char? Dieser ist ja normalerweise sowieso nur ein Byte groß und da kommt die ganze LE <-> BE problematik ja noch gar nicht zum tragen auser es gäbe auch Bitwiese schon probleme aber das scheint ja eine sehr selten anzutrefende art der Architektur zu sein...



  • Hallo Leute,

    wenn ich auf einer "W2K-PC Plattform" mittels einer "union" (float, char[4])
    und per "memcpy" eine "float" Variable nach "char" umsetze dann habe ich
    4-Byte "Little-Endian", über das Netz (Socket-Verbindung) z.B. zu der "HP-UX
    Workstation" wird am Ziel erwartet 4-Byte "Big-Endian", also ist mein Wunsch
    wie kann ich auf der Quellmaschine bereits die Umsetzung durchführen ???

    MFG



  • Ich glaube, bei floats stehst du vor ein paar mehr Problemen als Big Endian vs. Little Endian 😉
    Aber ansonsten kannst du dir ja eine eigene Funktion schreiben, die dein char-Array umordnet (such mal nach "String umkehren" hier, im C++ Board oder in den FAQs).



  • nochmals Hallo,

    also ich bekomme über die Socketsverbindungen bereits "char, int, float, double"
    problemlos übertragen !!!
    Wobei "char" natürlich einfach war, "int" bearbeite ich mit "htonl & ntohl",
    "float & double" mache ich mittels "sprintf" zu "char". Für "float & double"
    habe ich aber noch einen weiteren Weg gesehen, der über "union & memcpy"
    geht, aber da werden dann halt die Byte's in nicht gewünschter Reihenfolge
    verschickt, das ist das Problem.
    Ich werde dann halt mal weiter suchen und versuchen 😕 !

    MFG



  • http://de.wikipedia.org/wiki/External_Data_Representation

    das duerfte fuer dich die beste loesung sein.

    erklaer doch bitte mal, was bytefolge bedeutet.



  • Guten Morgen,

    das vorstehend aufgeführte "wikipedia" Dokument kenne ich und mittlerweile auch
    so diverse andere Ausarbeitungen. Damit aber keine Mißverständnisse aufkommen,
    meine Software läuft einwandfrei, ich habe beim stöbern im Forum halt nur noch
    eine andere Art & Weise der Sockets-Datenübertragung gelesen.
    Ich wandele z.B. meine "float" Daten mittels "sprintf" und schicke dann "char"
    über das Netz, im Forum habe ich dann etwas über "union" und "memcpy" gelesen
    was ich natürlich auch ausprobiert habe und was ebenfalls problemlos funktioniert,
    nur vor jedem senden muß ich halt aus "char" 0...3 -> "char" 3...0 machen, d.h.
    halt von "Little-Endian" zu "Big-Endian".
    Das ist kein Problem, ich habe nur gedacht ob es vielleicht und eventuell eine
    ANSI-C oder Systemroutine dafür gibt und ob die dann Jemandem bekannt ist.
    So und nun noch einen schönen 😋 3.Advent 😋 !!!

    MFG


Anmelden zum Antworten