2017-01-27 4 views
0

Bisher in meinem Projekt, wo ich verschiedene Datentypen an einem Ort und am Ende sendet sie durch ein Medium byteweise zu speichern hatte, habe ich immer eine eigene Gewerkschaft:QVariant Nutzung statt Vereinigung

union union64_t 
{ 
    quint16 u16[4]; 
    qint16 i16[4]; 

    quint32 u32[2]; 
    qint32 i32[2]; 
    float f32[2]; 

    quint64 u64; 
    qint64 i64; 
    double f64; 

}; 

Ist gibt es eine Möglichkeit, Qvariant anstelle dieser Union zu verwenden? Selbst wenn ich eine q Variante mit etwas zuweisen, das heißt:

Qvariant test(1.25f); 

Wie kann ich extrahiert es als Bytes (vorausgesetzt, es war ein double oder float Typ)? Ich würde alle Hilfe schätzen.

+0

Hinweis: Typ Punning wird in C++ unterstützt (es wird in C BTW unterstützt). – Jarod42

+0

In allen Fällen ist das Senden einer 'quint64' * byteweise * über das Netzwerk nicht die beste Idee, da sich die [endiannes] (https://en.wikipedia.org/wiki/Endianess) möglicherweise von Host zu Host unterscheiden. – Mike

+0

Ich sende dies über CAN (Controller Area Network). Alle Ziele sind Little Endian. – Bremen

Antwort

0

Es sieht nicht so aus, als ob QVariant unterstützt, was Sie tun möchten. Die nächstliegende Methode wäre toByteArray, aber es gibt nur Daten zurück, wenn die ursprünglichen gespeicherten Werte bereits ein QByteArray oder ein QString sind.