reinterpret_cast
-
hi!
wie funktioniert das mit reinterpret_cast?struct Message { char name[256]; unsigned int size; }; Message message; strcpy(message.name, message.c_str()); message.size = 100; socket.send(reinterpret_cast<char*>(&message), sizeof(message));
wird da eine struktur in einen char* zeiger umgewandelt? hab gehört man sollte reinterpret_cast nicht so oft verwenden ---> man sehr gefährliche Sachen machen...
cu
-
Da wird nichts umgewandelt, sondern nur anderes interpretiert.
-
caster schrieb:
wird da eine struktur in einen char* zeiger umgewandelt? hab gehört man sollte reinterpret_cast nicht so oft verwenden ---> man sehr gefährliche Sachen machen...
Richtig. Man soll ihn nur verwenden wenn man sich 100%ig sicher ist, dass es das Richtige ist was man gerade tut.
-
caster schrieb:
socket.send(reinterpret_cast<char*>(&message), sizeof(message));
wird da eine struktur in einen char* zeiger umgewandelt?
Nein, die Adresse der Struktur wird in einen char-Pointer umgewandelt.
-
wird da eine struktur in einen char* zeiger umgewandelt?
nicht ganz. es wird nur der zeiger &message in einen char* verwandelt.
hab gehört man sollte reinterpret_cast nicht so oft verwenden ---> man sehr gefährliche Sachen machen...
jo. stell dir mal das hier vor:
struct Message { string name; unsigned int size; }; Message message; message.name=message; message.size = 100; socket.send(reinterpret_cast<char*>(&message), sizeof(message));
das würde unfug sein. nicht nur unfug, nach dem einlesen mit read() auf die selbe weise wird es sogar ein wenig crashen.
also muß man bem hantieren mit reinterpret_cast selber aufpassen, daß nix schief geht. und schiefgehen kann schon allerhand. das ist natürlich kein grund, es sein zu lassen.
grund, es sein zu lassen, finden wir eher, wenn wie die alternative angcken:
struct Message { char name[256]; unsigned int size; }; void send(Message& msg,socket& sock){ send(sock,msg.size); send(sock,msg.name); }
also einfach vor dem string immer die size senden und dann die daten und beim einlesenb eben andersrum und für senden von int, sring, Message und was auch sonstnoch je ne send-funktion anbieten.
das hat sich auch den vorteil, daß nicht immer ein 256-bytes großes paket auf die reise geht, sondern nur die nutzdaten.