Sinnhaftigkeit von Konversion
-
Heho, hab gerade in einem mir vorliegenden Programmcode folgende Funktion gefunden:
"inline float ntohf_my(float wert){
float temp;
((int)&temp) = htonl( ((int)&wert) );
return temp;
}"welchen sinn hat das "((int)&wert)"? Ist doch identich zu "(int)wert" oder nicht?
-
1.) Benutze cpp-tags und formatiere deinen Code anstaendig.
2.) Zu deiner Frage: Nein.
-
Namenloser324 schrieb:
welchen sinn hat das "((int)&wert)"? Ist doch identich zu "(int)wert" oder nicht?
Ersteres ist ein lvalue, letzteres nicht.
(Außerdem ist ersteres ein Uminterpretieren des Bitmusters der float-Variablen als int, während letzteres eine Konvertierung des numerischen Wertes der float-Variablen nach int ist.)
-
Ok, vielen Dank, das ergibt Sinn.
Aber in der Funktion erscheint mir das nicht notwendig, oder sehe ich wieder etwas anderes nicht?!
-
Das ist ein übler Hack, der nur Funktioniert, wenn
sizeof(int) == sizeof(float)
ist.Du hast erstmal die Adresse von einem float (das &wert)
Diese Adresse wird in einen Zeiger auf int umgewandelt (durch einen cast mit dem (int *))
Dann wird der Inhalt von dieser int-Adresse geholt und an die Funktion übergeben.Auf der linken Seite wird das entsprechen mit temp gemacht, nur das diesmal der Rückgabewert von der Funktion (ein int) nach temp geschrieben wird.
Dabei kommt es nicht auf die eigentlichen Werte an, sondern nur auf das "Bitmuster".