Alles rund um die Programmierung mit Qt
-
huckleberry
- Beiträge: 115
- Registriert: 2. Oktober 2010 17:07
Beitrag
von huckleberry »
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
Zuletzt geändert von
huckleberry am 17. April 2011 14:41, insgesamt 1-mal geändert.
-
upsala
- Beiträge: 3946
- Registriert: 5. Februar 2006 20:52
- Wohnort: Landshut
-
Kontaktdaten:
Beitrag
von upsala »
Probiers mal damit:
Code: Alles auswählen
union {
struct {
char c1;
char c2;
char c3;
char c4;
}
float f;
}
c1-c4 auffüllen und f auslesen.
-
kater
- Beiträge: 306
- Registriert: 29. Dezember 2009 01:13
- Wohnort: Darmstadt
Beitrag
von kater »
Wann funktioniert sie denn nicht?
-
huckleberry
- Beiträge: 115
- Registriert: 2. Oktober 2010 17:07
Beitrag
von huckleberry »
upsala hat geschrieben:Probiers mal damit...
Sieht vielversprechend aus. hier mal Ausschnitt für 8Byte aus der Header:
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;
};
Dann die cpp:
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;
}
Gibt Fehlermeldung. Es wird versucht auf einen Speicherbvereich zuzugreifen, wo keine Erlaubnis besteht. Im konstruktor habe ich folgendes:
Code: Alles auswählen
this->dQDate = new QDate();
this->dQDate = convertDelphi2Qt(qba);
-
Dateianhänge
-

- screen.png (21.02 KiB) 3763 mal betrachtet
-
huckleberry
- Beiträge: 115
- Registriert: 2. Oktober 2010 17:07
Beitrag
von huckleberry »
kater hat geschrieben:Wann funktioniert sie denn nicht?
ich habe immer solche 8er ByteArrays in welchem eine Fliesskommazahl nach IEEE 754 kodiert ist. Folgendes geht zB nicht:
Code: Alles auswählen
QByteArray t = QByteArray::toFloat("D3EF4401010101EE");
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
-
Kontaktdaten:
Beitrag
von Christian81 »
Steht ja auch nirgends dass es gehen soll - so what?
Qt bietet das nicht an also selbst programmieren...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
huckleberry
- Beiträge: 115
- Registriert: 2. Oktober 2010 17:07
Beitrag
von huckleberry »
Christian81 hat geschrieben:Steht ja auch nirgends dass es gehen soll - so what?
Ich kenne nicht alle Bibliotheken auswendig.
Nevertheless, großen Dank an
upsala für die konstruktive Antwort. Es funzt!