Kurze Frage zu Endianess und Transfer von Strukturen via TCP
-
Heho, kurze einfache Frage:
Habe eine Struktur mit einigen integer und short werten drin auf einem big endian system, von welchem ich auf ein little endian system übertragen muss.
Dazu habe ich die integer und shorts in ein chararray gepackt(mittels memcpy) und diese versandt, nun kurz die Info die ich benötige:
memcpy kopiert 1:1, d.h. ich muss auf dem Zielsystem noch berücksichtigen das ich die charorder umdrehen muss um die korrekten werte zu erhalten, richtig?
-
Jo, klar.
-
Gut, danke, kann dann zu.
-
Schau dir mal die Funktionen htons und ntohs an (oder gleich die ganze Familie).
htons = Host TO Network Short
ntohs = Network TO Host Short
Die biegen die Byteorder richtig hin.
-
Die sind mir bekannt, aber meines wissens nach ist bei strukturen das beste, alles per chararray zu versenden.
Danke dir natürlich dennoch
-
Namenloser324 schrieb:
Die sind mir bekannt, aber meines wissens nach ist bei strukturen das beste, alles per chararray zu versenden.
Öhhh, natürlich, via TCP werden immer chars versendet. Aber mal angenommen, Dein Programm weiß nicht, ob es auf einem Big- oder LittleEndian System läuft. Dann ist es sinnvoll, mit den von DirkB genannten Funktionen zu arbeiten.
Am sichersten ist es, die numerischen Werte in ihre Stringdarstellung zu überführen und dann zu senden - denk mal an die Möglichkeit, dass Dein int auf unterschiedlichen Systemen unterschiedliche Breiten haben kann.