- Mitglied seit
- 09.11.2002
- Beiträge
- 880
- Reaktionen
- 0
Hallo erstmal.
Ich habe da ein kleines Problem, nämlich eine Datei die reine Binärdaten enthält. Soweit so gut, nur: Die Datei wurde mit einem FORTRAN-Programm geschrieben und enthält Zahlen mit verschiedener floting point Genauigkeit. Die will ich mit C in double Variablen einlesen. Wie geht das?
Aufbau der Datei:
2 byte integer wert (gibt an, wieviele floating point werte folgen)
4 byte floating point
...
Meine Idee: Ich lese 2 byte in einen buffer, mittels 256*1.byte + 2.byte bekomme ich daraus den integer wert. das funktioniert auch wie erwartet - denke ich, zumindest bekomme ich einen sinnvollen wert, wobei das umgekehrte auch relativ sinnvoll ist, also little vs big endian...
Aber danach kann ich ja nur byteweise einlesen, also wie mache ich aus 4 byte in einem buffer einen double mit sizeof(double)=8?
gibt es da konvertierungsroutinen oder muß ich jetzt selber per hand eine schreiben - was blöd wäre, weil ich - im gegensatz zu int, char, long, etc - a priori erstmal gar nicht weiß wie ein double überhaupt aufgebaut ist.
hmm, hoffe mein problem ist einigermaßen klar.
Zusammenfassung:
Wie lese ich aus einer datei binärdaten, deren größe nicht unbedingt der größe von float oder double entspricht?
das ist doch sicher kein Problem mit dem nur ich alleine dastehe, da muß es doch lösungen geben?
Danke sehr!
Ich habe da ein kleines Problem, nämlich eine Datei die reine Binärdaten enthält. Soweit so gut, nur: Die Datei wurde mit einem FORTRAN-Programm geschrieben und enthält Zahlen mit verschiedener floting point Genauigkeit. Die will ich mit C in double Variablen einlesen. Wie geht das?
Aufbau der Datei:
2 byte integer wert (gibt an, wieviele floating point werte folgen)
4 byte floating point
...
Meine Idee: Ich lese 2 byte in einen buffer, mittels 256*1.byte + 2.byte bekomme ich daraus den integer wert. das funktioniert auch wie erwartet - denke ich, zumindest bekomme ich einen sinnvollen wert, wobei das umgekehrte auch relativ sinnvoll ist, also little vs big endian...
Aber danach kann ich ja nur byteweise einlesen, also wie mache ich aus 4 byte in einem buffer einen double mit sizeof(double)=8?
gibt es da konvertierungsroutinen oder muß ich jetzt selber per hand eine schreiben - was blöd wäre, weil ich - im gegensatz zu int, char, long, etc - a priori erstmal gar nicht weiß wie ein double überhaupt aufgebaut ist.
Code:
bool Fitwindow::readModelFile(QString s)
{
QFile file(s);
file.open(QIODevice::ReadOnly);
QDataStream stream(&file);
char buf[2];
stream.readRawData(buf,2);
int nf = buf[0]*256+buf[1]
double *wave = (double *) malloc(nf*sizeof(double));
for (int i=0; i<nf; i++) {
stream.readRawData( ((char *) &wave[i]), 4); // funktioniert natürlich nicht, aber wie sonst?
}
file.close();
free(wave);
return true;
}
hmm, hoffe mein problem ist einigermaßen klar.
Zusammenfassung:
Wie lese ich aus einer datei binärdaten, deren größe nicht unbedingt der größe von float oder double entspricht?
das ist doch sicher kein Problem mit dem nur ich alleine dastehe, da muß es doch lösungen geben?
Danke sehr!

