Problem beim lesen einer Datei
-
Hi!
Ich habe hier ein Code-Schnippsel, der bei mir schon Probleme macht:
#include <stdio.h> int main() { FILE *f = fopen("test.bmp", "r"); int i = 100; int a = 0; for (i; i > 0; i--) { a = fgetc(f); printf("%d", a); } fclose(f); return 0; }
Die Ausgabe:
C:\MinGW\bin>a.exe
66775403600000540004000004000300102400000000019614001961400000000001016522131562
11014920331572060158202015319501531963150196-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
-1-1-1-1Warum liest der auf einmal nichtmehr weiter?? (Die Datei ist über 2MB groß...
Viele Grüße, Alex
-
weil du nur i==100 zeichen lesen willst?
nimm "rb" im fopen(), schliesslich liest du eine binaerdatei und keine textdatei.
-
Also das mit den 100 Zeichen: Ich will ja hier nich die Ausgabe von 2MB posten, wenn der Fehler schon nach ein paar Bytes auftritt.
Und ansonsten: Danke, genau da lag der Fehler.
Nur um das ganze zu verstehen: ist in einer Datei byte nicht gleich byte?
Inwiefern behandelt c diese datei anders, wenn ich das b weglasse und worann könnte es liegen, dass er plötzlich aufhört?Viele Grüße, Alex
-
ich vermute mal, dass -1 == 0xff == 255 == weiss, oder? mach mal eine bmp mit ner anderen farbe, z.b. rot.
"b" oder nicht-b ("t", ja es kann auch "rt" heissen) bedeutet, dass beim einlesen als nicht-binaer die zeilenumbrueche umgewandelt werden. es gibt \r\n, \n und \r und beim einlesen wird in das fuer dein OS typische format umgewandelt.
-
eine Bitmap ist so folgendermaßen aufgebaut:
es gibt da erst einmal den BITMAPINFOHEADER darin stehen alle Informationen zur Größe des Bildes. Außerdem git es den BITMAPFILEHEADER das z. B. die Byteinformationen eines Bildes beinhalten.
Dann gibt es auch noch das RGBQuad array. Darin stehen die Farbinformatione jedes einzrelnen Pixels.
typedef struct tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved;} RGBQUAD;
Wenn du nun eine BMP Datei erzeugen möchtest, dann schreibst du erst den BITMAPFILEHEADER, den BITMAPINFOHEADER und zum Schluss noch das RGBQuad Array in die Datei. Das siehst du auch wenn du eine bmp datei im Editor öffnest.
Wie schon "c.rackwitz" geschrieben hat sind die Werte von 0 -255 (auf jedenfall beim RGBQAUD Array). Im Editor sind allerdings alle zeichen im Ascicode angezeigt.