wann liest fread() weniger als gefordert?



  • hi,

    ich hänge an folgendem Problem:
    Ich möchte unter Win7 ein Bild mit 16 bit pro Pixel binär von Datei lesen.

    unsigned short int image[256*256];
    ...
    FILE *file=fopen(filename, "r");
    if (file) {
       ...   // Header einlesen
       sz = w*h;	// w=Breite, h=Höhe
       size=fread(image, 2, sz, file);
    ...
    }
    

    Der Debugger sagt mir:
    sz=65536, hat den korrekten Wert.
    size=219 !!! 😡

    Die Dateigröße wird im Explorer mit 128K + header angegeben.

    Warum liest das Programm nur 219 Pixel ein?



  • FILE *file=fopen(filename, "rb");
    


  • Der Beitrag von dem über mir möchte wohl in seiner kurzen Andeutung aussagen, dass du die Datei schon binär zum lesen öffnen musst wenn du binär lesen möchtest.
    Daher "rb" anstatt "r" angeben!



  • Das ist jetzt der dritte Versuch, auf den Tipp zu antworten.

    fopen(filename,"rb"), also das "rb" war die Lösung. Anscheinend bricht fread() mit dem Einlesen ab, sobald ein "Fileende" in den Daten vorkommt, wobei nach binärem Öffnen eine solche Interpretation nicht erfolgt.

    Ok, vielen Dank für den Tipp



  • Auf DOS und Windows ist es das Zeichen ^Z = 26 = 0x1A (s. http://de.wikipedia.org/wiki/End_of_File)

    Im nicht binary-Mode wird noch das Zeilenende ersetzt von \r\n nach nur \n
    bzw. umgekehrt, beim schreiben von \n wird vom System ein \r\n geschrieben.

    Das kann man mit dem binary-Modus verhindern.


Anmelden zum Antworten