Hallo Foristen,
ich habe einE Datenstruktur QByteArray in welchem byteweise Fliesskomma Daten EEE 754) abgelegt sind. 4Byte float oder 8Byte double.
Diese würde ich gerne nach float casten oder irgenwie effektiv umwandeln.
)ie Methode QByteArray::toFloat funktioniert nur bei bspw. "15.681" richtig.
Da gibts doch bestimmt eine effektive Möglichkeit?
Vielen Dank
huck
(gelöst) QByteArray nach Flieskomma IEEE 754
-
- Beiträge: 115
- Registriert: 2. Oktober 2010 17:07
(gelöst) QByteArray nach Flieskomma IEEE 754
Zuletzt geändert von huckleberry am 17. April 2011 14:41, insgesamt 1-mal geändert.
Probiers mal damit:
c1-c4 auffüllen und f auslesen.
Code: Alles auswählen
union {
struct {
char c1;
char c2;
char c3;
char c4;
}
float f;
}
-
- Beiträge: 115
- Registriert: 2. Oktober 2010 17:07
Sieht vielversprechend aus. hier mal Ausschnitt für 8Byte aus der Header:upsala hat geschrieben:Probiers mal damit...
Habe
Code: Alles auswählen
struct qba_double{
char c1;
char c2;
char c3;
char c4;
char c5;
char c6;
char c7;
char c8;
};
union Byte2Double{
qba_double b2d_b;
double b2d_d;
};
Gibt Fehlermeldung. Es wird versucht auf einen Speicherbvereich zuzugreifen, wo keine Erlaubnis besteht. Im konstruktor habe ich folgendes:QDate * DrawNumber::convertDelphi2Qt(QByteArray inQBA){
// QByteArray retQBA = inQBA.mid(0, 8);
// QByteArray retQBA = QByteArray::fromHex("40D3E4C000000000");
QByteArray retQBA = QByteArray::fromHex("40D3E4C000000000");
Byte2Double tt;
tt.b2d_b.c1 = retQBA.at(0);
tt.b2d_b.c2 = retQBA.at(1);
tt.b2d_b.c3 = retQBA.at(2);
tt.b2d_b.c4 = retQBA.at(3);
tt.b2d_b.c5 = retQBA.at(4);
tt.b2d_b.c6 = retQBA.at(5);
tt.b2d_b.c7 = retQBA.at(6);
tt.b2d_b.c8 = retQBA.at(7);
double g = tt.b2d_d;
int iyear = 1899 + (g/356);
QDate *rQD = new QDate(iyear, 0, 0);
rQD->addDays((int)g);
return rQD;
}
Code: Alles auswählen
this->dQDate = new QDate();
this->dQDate = convertDelphi2Qt(qba);
- Dateianhänge
-
- screen.png (21.02 KiB) 3170 mal betrachtet
-
- Beiträge: 115
- Registriert: 2. Oktober 2010 17:07
ich habe immer solche 8er ByteArrays in welchem eine Fliesskommazahl nach IEEE 754 kodiert ist. Folgendes geht zB nicht:kater hat geschrieben:Wann funktioniert sie denn nicht?
Code: Alles auswählen
QByteArray t = QByteArray::toFloat("D3EF4401010101EE");
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
- Beiträge: 115
- Registriert: 2. Oktober 2010 17:07