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önen3.Advent
!!!
MFG