Nach weiterer Recherche und einigen Experimenten mit GCC ziehe ich meine Aussage zum Cast zurück und behaupte das Gegenteil, natürlich kannst du float nicht auf Integer casten ohne dass dabei eine Typumwandlung oder abgrundtief verbotenes Type-Punning über Pointer stattfindet.

Ich bin auf einen sehr guten Artikel zu dem Thema gestoßen, der die ganze Problematik sehr gründlich untersucht.
Ebenso wie hier kommt man zu dem Ergebnis, dass Type-Punning über Unions nicht wirklich dem Standard entspricht, aber unter GCC das Mittel der Wahl ist, um Daten ohne Typumwandlung zu reinterpretieren.
Unter letzerem Link ist übrigens auch ein Makro zu finden, dass das ganze vereinfachen soll, eine weitere Möglichkeit besteht darin, den Speicherbereich (via memcpy oder von Hand) zu kopieren, GCC sollte das gewünschte Vorhaben dann auch erkennen.

Ich fasse die gefundenen Ergebnisse noch einmal kurz zusammen:
Type-Punning über Unions ist im C-Standard undefiniert, über Pointertrickserei à la *(uint32_t *) &floatvariable sogar (strikt) verboten.
GCC definiert, um solche Operationen zuzulassen, dass Unions (wie man es eigentlich erwarten würde) "a rein, b raus" ermöglichen.
Aktiviert man den Compilerschalter "-fno-strict-aliasing" hat man den ganzen Stress auch nicht, dadurch werden aber einige Optimierungen unmöglich.

mfG
Markus

PS: Die Ursache des ganzen liegt in der Spezifikation von C(99), die verbietet dass zwei Pointer unterschiedlichen Typs beim dereferenzieren auf das gleiche Objekt verweisen.