Float liefert falschen Wert(?)
-
Danke für die schnelle Antwort.
Gespeichert werden die Dateien von einem Programm. Ich gehe davon aus, dass diese binär gespeichert sind.
Die Lösung ist natürlich eleganter. Das Problem bleibt allerdings bzw. nun bekomme ich nur 0 Werte. Ich bin mir allerdings sicher, dass die Daten in der Datei richtig gespeichert und != 0 sind.
-
Naja, jetzt gäbe es nur noch anzumerken, dass du C Funktionen statt C++ Funktionen benutzt. Das hat aber sehr wahrscheinlich nichts mit deinem Problem zu tun, es gilt nur als "unschön"

Zu deinem Problem, bist du sicher, dass du an der richtigen Byteposition bist? Ein typischer Fehler beim Auslesen von binären Daten ist, dass man plötzlich um ein paar Bytes verrutscht, aus welchem Grund auch immer.
Hast du auch BE/LE (Endian) richtig beachtet, also sind die im File gleich, wie das System auf welchem du arbeitest?
Ansonsten, ist es schwer dir da zu helfen. Wenn alle Voraussetzungen richtig erfüllt sind, müsste der Code funktionieren

Grüssli
-
*Räusper* Ja das mit den C-Funktionen ist nicht die schönste Lösung, ich hatte aber mal einen ähnlichen Ansatz in C, den ich einfach wiederverwendet habe.
Die Byteposition ist defintiv richtig, da sich die ersten Werte oftmals auslesen lassen und die einfach alle hintereinander weggeschrieben sind. Deswegen verwirrt mich die ganze Sache auch etwas...
-
So, was ich jetzt noch mal gemacht habe ist, dass ich den File-Pointer X*4 Stellen weiter gesetzt haben, wo sonst immer nur die selben Zahlen kamen. Nun bekomme ich aber wieder richtige Werte und ab einer bestimmten Position dann wieder die selben.
Es sind 340*240 Werte. Müsste ich ab ner bestimmten Anzahl mal ne "Pause" machen oder so?
-
Die Zahl -107374176f entspricht dem Bitmuster von 4 Bytes mit je dem Wert 0xCC. Das ist im Debug-Modus von Visual-C++ ein Zeichen für eine uninitialisierte Speicherstelle. Ich würde also sagen, der fread-Aufruf ist an der Stelle fehlgeschlagen. Dateiende erreicht und nicht richtig abgefangen?
(Meine erste Idee wäre gewesen, dass die Datei im Textmodus statt im Binärmodus geöffnet ist, aber das scheint es nicht zu sein.)Falls das nicht hilft, mal eine Fehlerbehandlung einfügen:
// traditionell gehalten ;) hab gerade keine Lust auf Exceptions if (fread((char*)&buffer, 4, 1, file) < 1) { perror("fread"); exit(EXIT_FAILURE); }
-
Mh, an der besagten Stelle springt er in die If Bedingung, gibt aber an "fread: No error"
-
Also, ich bin es nun so umgangen, dass ich bei einem Error den Pointer um 4Bytes verschoben habe. Allerdings ist mir da nen bisschen unwohl bei. Könnte das evtl. nen Zeilenumbruch oä. verursacht haben?
-
Bennnno schrieb:
Könnte das evtl. nen Zeilenumbruch oä. verursachen?
Zeilenumbuch? Seit wann hat eine binäre Datei einen Zeilenumbruch? Die hat ja noch nicht einmal Zeilen. Bist du sicher, dass du binär gespeicherte Daten hast?

Grüssli
-
Hoppla, das ist natürlich Unfug.
Aber irgendwoher kommt der Fehler beim lesen ja.
-
Da müsste man jetzt das Protokoll welches beim Schreiben der Datei genommen wird kennen. Evtl. werden ja an bestimmten Stellen Steuerzeichen oder Kontrollcodes eingesetzt.
-
Die Beschreibung des Dateiformats gibt leider nur genaue Aufschlüsselung über den Header der Datei. Daten sollen hintereinander in der Datei stehen.
Ich teste erstmal so weiter und hoffe, dass ich mit meiner Gummiband Lösung auch alle Daten bekomme.
Vielen Dank erstmal.