C++ ist ja bekanntlich sehr strikt mit Datentypen, allerdings gibt es auch 1000 Wege zwischen den Typen zu konvertieren.
stringstream kann das besonders gut
typ x >> stringstream
typ y << stringstream
klappt in den allermeisten Fällen, zumindest solange man im Voraus weiss, dass das was da konvertiert wird in den Ziel-Typ rein passt.
Jetzt habe ich eine Verständnis-Frage, wo ich mir nicht sicher bin ob das so einfach geht.
Ich habe ein UINT, was nur Werte zwischen 1 und ca. 90.000 enthalten kann.
Ich möchte nun diesen Wert zu Typ void* konvertieren und später wieder zurück zu UINT, also nicht einen Pointer auf den Speicherplatz wo der Wert steht, sondern direkt, so dass der Pointer selbst den Wert enthält, ohne dass mich interessieren würde was an der Adresse steht auf die der Pointer zeigt und das Ganze sollte mit identischem sourcecode sowohl mit einem 32bit als auch mit einem 64bit Compiler funktionieren.
Mein Ansatz ist nun
Der reinterpret_cast sollte ja auf beiden Systemen die Grösse anpassen und solange ich weiss, dass da immer nur Werte zwischen 1 und ca. 90.000 drin stehen sollte auch der cast zurück auf UINT gehen, oder übersehe ich da jetzt was?
stringstream kann das besonders gut
typ x >> stringstream
typ y << stringstream
klappt in den allermeisten Fällen, zumindest solange man im Voraus weiss, dass das was da konvertiert wird in den Ziel-Typ rein passt.
Jetzt habe ich eine Verständnis-Frage, wo ich mir nicht sicher bin ob das so einfach geht.
Ich habe ein UINT, was nur Werte zwischen 1 und ca. 90.000 enthalten kann.
Ich möchte nun diesen Wert zu Typ void* konvertieren und später wieder zurück zu UINT, also nicht einen Pointer auf den Speicherplatz wo der Wert steht, sondern direkt, so dass der Pointer selbst den Wert enthält, ohne dass mich interessieren würde was an der Adresse steht auf die der Pointer zeigt und das Ganze sollte mit identischem sourcecode sowohl mit einem 32bit als auch mit einem 64bit Compiler funktionieren.
Mein Ansatz ist nun
Code:
UINT x = 1234;
void* y = reinterpret_cast<void*>(x);
UINT z = (UINT)y;
Der reinterpret_cast sollte ja auf beiden Systemen die Grösse anpassen und solange ich weiss, dass da immer nur Werte zwischen 1 und ca. 90.000 drin stehen sollte auch der cast zurück auf UINT gehen, oder übersehe ich da jetzt was?