Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

23.09.2007, 21:38

Casts genau erklärt

hallo leute..

ich weiss nicht warum, aber das casten will ich einfach nicht verstehen..

hat irgendwer von euch einen link wo das casten für absolute idioten wirklich schritt für schritt bis ins detail (auch hintergrundinformationen was da genau passiert) erklärt wird?

das richtige convertieren macht mir rießen probleme.. genauso wie das arbeiten mit chars und srtring (also das umconvertieren)

ich hasse es sollche basic-fragen zu stellen, aber ich komme auf dem gebiet einfach nicht weiter..
:cry:
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

23.09.2007, 22:16

was genau verstehst du nicht?

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

3

23.09.2007, 22:17

casts in C oder in C++?

Hab einfach mal gegooglet... http://www.cplusplus.com/doc/tutorial/typecasting.html

Socke

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

4

24.09.2007, 08:01

ich würde mich gerne auf die c++ casts beschränken (soweit ich mitbekommen habe sind C-casts nicht mehr empfehlenswert)
ich verstehe nicht wann, was, wie gecastet werden kann/darf.

ich verstehe auch die unterschiede nicht zwischen dynamic, reinterpret bzw. const_cast usw.

ich steh ja schon an wenn ich einen system::string zu char convertieren soll.. :(

edit:
wenn ich schon da bin.. ich hab so nen kleinen "chat" geschrieben.. also mithilfe eins tutorials natürlich ^^ und jetzt versuche ich das ganze auf visual c anzuwenden, jedoch .. beim senden verwende ich die funktion

C-/C++-Quelltext

1
send(SOCKET s, const char *buf, int len, int flags);


und naja.. wie ihr sehn könnt ist der 2te parameter ein const char, der text aus der textbox den ich gerne senden würde ist jedoch vom typ system::string und damit hab ich wie gesagt so meine probleme ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

24.09.2007, 08:38

system::string ist allerdings ein wenig anders. Dabei handelt es sich ja um eine Klasse. Solche Klassen liefern oft bestimmte Methoden mit, mit denen man an die Daten kommt.

http://msdn2.microsoft.com/en-us/library/system.string.tochararray.aspx

das sollte das sein was du suchst.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

6

24.09.2007, 09:00

deinstring.c_str() liefert dir das C Äquivalent zu einem String zurück (also const char*). Wenn man das erstmal rausgefunden hat, ist der Rest ganz einfach. Ich hab auch ne Weile gebraucht ^^

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

24.09.2007, 09:16

@gurke auch bei system::string? Weil ich kenne das c_str() auch, aber das scheint nicht bei dem system::string vorhanden zu sein. Zumindest habe ich davon nichts in der MSDN gesehen.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

8

24.09.2007, 09:29

Ay fu, ich hab doch tatsächlich nur das s gesehen ... :oops: Ignorier mich, ich ging von std::string aus.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

24.09.2007, 09:41

Zitat von »"$nooc"«

ich würde mich gerne auf die c++ casts beschränken (soweit ich mitbekommen habe sind C-casts nicht mehr empfehlenswert)


Grundlegend spricht nichts gegen C-Casts. Der "Vorteil" von C++ Casts ist eben das jeder Casting-Operator genau eine Aufgabe erledigt, ein C-Cast umfasst alle diese Aufgaben. Der Vorteil ist eben das man bei C++ Casts genau sieht was der Cast macht. Außerdem sind C++ Casts-Operator aufgrund ihres Aussehens sehr auffällig im Code. Man sieht also ganz leicht wo, was gecastet wird.
Außerdem werden z.T. diverse Dinge angeboten wie z.B. Ausnahmen die beim fehlerhaften Umwandeln geworfen werden.

Zitat von »"$nooc"«


ich verstehe nicht wann, was, wie gecastet werden kann/darf.


Eigentlich sollte man versuchen immer ohne Typenumwandlung auszukommen. Casts untergraben das strikte Typensystem von C++ und sind deshalb nicht empfehlenswert. Allerdings gibt es doch hin und wieder Situationen bei denen Casts eine elegantere Lösung darstellen, in diesen (seltenen) Situationen sind Casts also erlaubt.

Zitat von »"$nooc"«


ich verstehe auch die unterschiede nicht zwischen dynamic, reinterpret bzw. const_cast usw.


static_cast
Wird zum Casten von Typen in andere Typen verwendet die implizit zueinander gecastet werden können und erlaubt das zurückcasten der Typen, selbst wenn das implizit nicht erlaubt ist.
Wenn static_cast auf Zeiger angewendet wird, ist es möglich ein Objekt eines spezialisierten Typs eines Basistyps (z.B. Derived : public Base) zu einem Zeiger des Basistyps (implizit), als auch, umgekehrt, ein Zeiger vom Basistyp in einen Zeiger des abgeleiteten Typs umzuwandeln.

Merke:
Wandelt Typen um die implizit zueinander gecastet werden können
Kann umgekehrt (im 1. Punkt genannte Typen) zurück casten
Wandelt Zeiger auf abgeleitete Typen in Zeiger auf Basistypen um
Kann umgekehrt Zeiger auf Basistypen in Zeiger auf Abgeleitete Typen umwandeln

Prüft nicht nach ob die gültig ist (z.B. ob das Objekt ein vollständiges Objekt des Umwandlungstyps ist).

dynamic_cast
Wird zum Casten von Zeigern und Referenzen auf Objekten polymorpher Typen verwendet. Hier wird geprüft ob ein Cast gültig ist. Im Fehlerfall wird eine Ausnahme geworfen. Dieser Casting-Operator kann sehr Performancefressend sein!

Merke:
Zum Umwandeln von Zeigern und Referenzen auf Polymorphe Typen verwendet
Prüft ob die Umwandlung "gültig" ist und wirft Ausnahme im Fehlerfall

reinterpret_cast
Der C-Cast ähnlichste Cast-Operator von C++. Er erlaubt jeden Zeigertyp in einen beliebigen anderen Zeigertyp zu casten. Kann Zeiger auf Objekte unabhängiger Klassen casten.

Merke:
Umwandeln von jeden Zeigertyp auf jeden anderen Zeigertyp möglich
Umwandeln von Zeigern, zu Zeigern auf unabhängige Objekte möglich
Führt eine einfache binäre Kopie beim Umwandeln durch
Keine Prüfung ob die Umwandlung gültig ist
Nicht portabel.

const_cast
Manipuliert das const-Attribut des übergebenen Objekts. Ein Objekt kann also übergeben werden und in ein nicht konstantes Objekt gleichen Typs umgewandelt werden.

Merke:
Manipuliert das const-Attribut des übergebenen Objekts
Der einzige Cast-Operator der die "Konstantheit" von Objekten beeinflussen kann
Kann auch den volatile Vermerk von Objekten ändern

Zitat von »"$nooc"«


ich steh ja schon an wenn ich einen system::string zu char convertieren soll.. :(


Da werden, wie bereits erwähnt, oftmals Methoden angeboten.

Zitat von »"$nooc"«


edit:
wenn ich schon da bin.. ich hab so nen kleinen "chat" geschrieben.. also mithilfe eins tutorials natürlich ^^ und jetzt versuche ich das ganze auf visual c anzuwenden, jedoch .. beim senden verwende ich die funktion

C-/C++-Quelltext

1
send(SOCKET s, const char *buf, int len, int flags);


und naja.. wie ihr sehn könnt ist der 2te parameter ein const char, der text aus der textbox den ich gerne senden würde ist jedoch vom typ system::string und damit hab ich wie gesagt so meine probleme ^^


Vermutlich so:

C-/C++-Quelltext

1
2
3
const char* buf = ( const char* )( void* )Marshal::StringToHGlobalAnsi( str );
send( s, buf, len, flags );
Marshal::FreeHGlobal( buf );
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

10

25.09.2007, 13:00

puh das is ganz schön viel stoff ^^

und verwirrend kommt es mir leider nach wie vor vor. ^^
ich denke ich werde mich mal einfach hinsetzen müssen, und all diese casts mal ausprobieren.. ich bin einer der wills erst verstehn wenn der das mal ausprobiert hat, und das ergebnis sieht .. ist leider ziemlich anstregend auf die art..

Das:

Zitat von »"David_pb"«


C-/C++-Quelltext

1
2
3
const char* buf = ( const char* )( void* )Marshal::StringToHGlobalAnsi( str );
send( s, buf, len, flags );
Marshal::FreeHGlobal( buf );


hab ich dann auch irgendwie geschafft.. das sah so hässlich aus dass ich mir bis jetzt nicht sicher war ob man ads wirklich so machen sollte. aber jetzt weiss ich es .. danke :)
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige