Konvertieren von int* nach float*
-
Hallo,
ich muss int* nach float* konvertieren, bekomme aber ganz andere Werte. Könnt ihr mir dabei helfen.
Das ist das Programmstuck:
int val = 203;
int* intval = &val;
float* floatval = (float*)intval;Ausgabe: floatval = 2.845e-043#DEN
Danke im Voraus.
-
int val = 203; float valfloat = val;
-
Oder wenn du unbedingt Pointer brauchst, dann so:
int ival = 203; int* intval = &ival; float fval = ival; // Oder float fval = *intval; float* floatval = &fval;Das Problem in deinem Code war naemlich, dass ein float-Zeiger und ein int-Zeiger nicht auf die gleiche Speicherstelle zeigen koennen. float und int koennen ja unterschiedlich gross sein. Deswegen brauchst du eine zusaetzliche Variable fval.
-
icarus2 schrieb:
Oder wenn du unbedingt Pointer brauchst, dann so:
int ival = 203; int* intval = &ival; float fval = ival; // Oder float fval = *intval; float* floatval = &fval;Das Problem in deinem Code war naemlich, dass ein float-Zeiger und ein int-Zeiger nicht auf die gleiche Speicherstelle zeigen koennen. float und int koennen ja unterschiedlich gross sein. Deswegen brauchst du eine zusaetzliche Variable fval.
Danke. Das Problem ist nun (jetzt wird geschimpft), dass ich ein fertiges Programm ändern muss, in dem zwei Berechnungen entweder in CPU oder im Prozessor auf der Grafikkarte durchgeführt werden können. Da für die Grafikkarte (CUDA-Bibliothek) float-Werte und für CPU int-Werte benutzt werden und eine Menge von gemeinsamen Funktionen existiert, muss ich nun einen int* zum float* umwandeln und als Parameter an eine Funktion übergeben.
Somit ist "float fval = ival;" keine Lösung, denn *intval zum Zeitpunkt der Umwandlung bereits mit Inhalt ankommt.
-
Du kannst nicht einfach die Pointer casten wenn du eigentlich den Inhalt ändern willst. Dann muss du schon eben den Inhalt ändern...
-
Vielen Dank für Lösungen. Ich habe das Problem anhand des Beispiels von icarus2 und Kommentar von dot gelöst, wo ich den Inhalt übergeben habe.
//alt
int val = 203;
int* intval = &val;
//neu
float* floatval = new float();
*floatval = fval;
-
Sorry, Fehler aufgetreten. Muss korrigieren
MimoseG schrieb:
Vielen Dank für Lösungen. Ich habe das Problem anhand des Beispiels von icarus2 und Kommentar von dot gelöst, wo ich den Inhalt übergeben habe.
//alt
int val = 203;
int* intval = &val;//neu
float fval = intval[0];
float* floatval = new float();
*floatval = fval;
-
Bei
float* floatval = new float();musst du dann allerdings dran denken, dass du floatval wieder mit delete freigeben musst. Das sollte man moeglichst vermeiden. Was ist denn an meiner Loesung oben nicht gut?
PS:
Bitte benutze C++ Code-Tags, dann kann man deinen Code besser lesen.
-
icarus2 schrieb:
Bei
float* floatval = new float();musst du dann allerdings dran denken, dass du floatval wieder mit delete freigeben musst. Das sollte man moeglichst vermeiden. Was ist denn an meiner Loesung oben nicht gut?
PS:
Bitte benutze C++ Code-Tags, dann kann man deinen Code besser lesen.Deine Lösung ist gut außer dem grünen Kommentar:-), das ich übersehen habe:-(
Danke für Hinweise. Ich muss aber das Thema jetzt beenden.
-
Was tut denn das
new float()da
Wieso nicht einfach mit einer Schleife über die int Werte laufen und float Werte rausschreiben? Ein simplesmy_floats[i] = static_cast<float>(my_ints[i]);sollte doch genau das tun was du willst!?
-
Selbst den Cast brauchst du dann gar nicht.
-
stimmt, ein simples std::copy() sollt schon ausreichen...