ftell(file) - falsche Position?

Nebuchadnezar

Erfahrenes Mitglied
Hi, programmiere gerade ein einfaches Steganographie-Programm. Funktioniert eigentlich schon ganze gut. Encoden und Decoden funktioniert soweit wenn ich die Nachricht in einer Bitmap speicher. Die Bits 0x06-0x09 in einer Bitmap sind für ka. was auch immer reserviert. Also solang an dem Bild nicht gefummelt wird perfekt. Ich dachte mir ich speicher in diesen Bits die Adresse vom Ende der Nachricht. Von der Überlegung klappt das ganz gut.
Jedoch stellt mich das vor folgendem Problem:
Wenn ich die letzten 8 Bits der "Botschaft" im Bild verstecke müsste ich doch mit
ftell(dateiname) die Position des letzten Bits bekommen. In meinem Fall wäre das 22318
oder 0x572e. Das speichere ich an der besagten "Adresse" im Bild.
Beim dekodieren ist das natürlich meine Abbruchbedingung. Jedoch wenn ich 0x572e als Grenze nehme fehlen noch einige Zeichen die nicht dekodiert wurden (sie stehen im Image aber anscheinend bekomme ich mit ftell(dateiname) die falsche "Position".
Mit Herumprobieren konnte ich die echte Grenze ermitteln: nähmlich 25091 bzw. 0x6203.
Hat jemand eine Idee woher diese 2773 Bits Differenz kommen?
Bin schon ratlos, Danke.
 
ARGH...
Ich habs selber gefunden. Es war ein ganz ein fieser Denkfehler.
Ich hab in einer forschleife die Einzelnen Bytes abgearbeitet. Nach 8 Bytes muss man natürchlich das zu dekodierende Zeichen zusammensetzen. Das hab ich mit einer extra Laufvariablen und einer if-abfrage innerhalb der for-Schleife realisiert.
Nachdem ich in der for-Schleife auch einen Extradurchgang habe zum zusammensetzen, wird die Laufvariable um 1 erhöht, obwohl ich eigentlich kein Zeichen ausgelesen habe. Das hat natürlich alles durcheinander gebracht. Das Problem hab ich dadurch beseitigt dass ich im alle 8 Durchgänge aufgerufenen else- Zweig einfach die Laufvariable der for- Schleife mit
Code:
i--;
wieder korrigiert habe. Jetzt klappt alles bestens. Wahnsinn wie sich so ein fieser Denkfehler einschleichen kann. Naja, danke trotzdem.
Falls jemand Interesse an dem Programm hat stell ichs nächstes mal rein.
 
Zurück