2016-11-13 3 views
-1

So unerwartet (für mich) in Qt ist es nicht möglich, Quint32 als Float-Wert neu zu interpretieren.quint32 als Float neuinterpretieren

Gibt es irgendwelche Ansätze außer Gewerkschaften, um eine Variable neu zu interpretieren?

union 
{ 
float f; 
quint32 q; 
}u; 
+0

Qt hat wirklich nichts damit zu tun, es ist einfach nur C++. – dtech

+0

Klingt wie eine fehlerhafte Annahme: 'reinterpret_cast (myQuint32Var)'. – MSalters

Antwort

0
quint32 i = 666; 
    void * vp = &i; 
    float f = *(float*)vp; 

Sie auch direkt die Adresse des i zu einem float * werfen könnte, aber das wird dazu führen, der Compiler, der sich über das Brechen strikter Aliasing-Regeln beschweren möchte. Nicht das Einfügen eines Void Pointers dazwischen macht es "besser", aber zumindest beklagen sie sich nicht.

Es funktioniert wie erwartet, 666 binär ist 1010011010, nach der Umwandlung f9.33265e-43 ist, die 00000000000000000000001010011010 binär ist - die binäre Darstellung ist das gleiche.

Stellen Sie sicher, dass die Zielgröße nicht größer ist als die Quellgröße, wenn Sie solche Konvertierungen vornehmen. In dieser Situation sind quint32 und float gleich 4 Byte. Wenn das Ziel jedoch größer als die Quelle ist, lesen Sie "wer weiß was", was negative Konsequenzen haben kann.

Verwandte Themen