Binär Datei auslesen

Slazer

Mitglied
Hallo,
ich möchte eine BMP-Datei binär öffnen und dann den ersten int-wert ausgeben,
um festzustellen ob es wirklich eine bmp-datei ist.
wenn ich den ersten int zert qber quslese, der, qls string qusgegeben BM ergeben müsste kommt was ganz kommisches heraus.
wie lese ich binäre dateien richtig aus ?
kann mir jemand ein beispiel geben, bei dem mit fread oder anders das "BM" der bitnapdatei ausgelesen wird?
mfg Slazer
 
Hallo,
ich möchte eine BMP-Datei binär öffnen und dann den ersten int-wert ausgeben,
um festzustellen ob es wirklich eine bmp-datei ist.
wenn ich den ersten int zert qber quslese, der, qls string qusgegeben BM ergeben müsste kommt was ganz kommisches heraus.
wie lese ich binäre dateien richtig aus ?
kann mir jemand ein beispiel geben, bei dem mit fread oder anders das "BM" der bitnapdatei ausgelesen wird?
mfg Slazer
Hast du dir deinen Post nach dem Schreiben eigentlich nochmal kurz durchgelesen? :rolleyes:

Zu den nötigen Befehlen fopen(), fget(), fread(), fclose() usw. gibt es Unmengen an Beispielen im Netz. Auch hier im Forum, nehme ich an.

Klick
 
Code:
#include <stdlib.h>
#include <stdio.h>

main()
{
  FILE *pf;
  char fname[256];
  int bytes[2];
  
  do {
    printf("Dateiname: ");
    gets(fname);
  } while(!(pf = fopen(fname, "rb")));
  
  bytes[0] = getc(pf);
  bytes[1] = getc(pf);
  fclose(pf);
  
  printf("Signatur: %c%c\n", bytes[0], bytes[1]);
  
  getchar();
}
 
Zuletzt bearbeitet:
so hier mein ""wirkliches" problem:
ich hab jetzt des BM ausgelesen, funktioniert wunderbar!
aber wie kann ich jetzt anderes, z.b. Höhe auslesen?
bei mir funktinierts net.
Code:
#include <stdlib.h>
#include <stdio.h>

main()
{
  FILE *pf;
  char fname[256];
  int bytes[6];
  
  do {
    printf("Dateiname: ");
    /*gets(fname);*/
    sprintf(fname, "%s", "test.bmp");
    printf("%s\n", fname);
  } while(!(pf = fopen(fname, "rb")));
  
  
  bytes[0] = getc(pf);
  bytes[1] = getc(pf);
  
  fseek(pf, 18, SEEK_SET);
  
  long *laenge = (long*) malloc(sizeof(long));
  fread(laenge, sizeof(long), 1, pf);
  
  fclose(pf);
  
  printf("Signatur: %c%c\n%d\n", bytes[0], bytes[1], laenge);
  free(laenge);
  
  getchar();
}
 
Zuletzt bearbeitet:
Nein, nein!
das ist garnicht mein problem!
ich weiss wie das format funtioniert.
nur schaff ich es nicht es auszulesen!
das ist mein problem warum ich den thread geöffnet habe!
 
Du brauchst gar kein long Pointer erstellen und reservieren, es reicht, wenn du eine einfache long Variable erstellst und die Adresse der Variable an fread übergibst.

Code:
long laenge;
fread(&laenge, sizeof(long), 1, pf);

(vielleicht noch zurechtcasten, falls Fehler auftreten)

Und genauso machst du weiter. Wenn du das Dateiformat kennst, dann weißt du doch was als nächstes kommt. Nun, fread hat die Dateiposition jetzt schon vorgeschoben und du ließt als nächstes das ein, was nach dieser long-Variablen kommt. Wenn's ein float ist, dann wieder analog wie oben nur mit float statt long usw. durch die ganze Datei. Solltest dann allerdings die ganzen Farbbytes in einem Array speichern, dass du dir aus den Längen- und Breiten-Infos, die noch im BMP-Header kommen, zurechtallokierst.
 
So ich habs nochmal mit dem obigen code versucht und mit dem funktinierts.
danke!
mein problem war, dass ich beim auslesen falsche werte herausbekommen habe, die laut format garnicht kommen dürften.
aber jetzt gehts!
 
Zuletzt bearbeitet:
hallo,
sorry dasich nochmal komm,
aber es funktioniert weiter unten auch nicht.
Ich lese den Header fehlerfrei aus.
Wenn ich dann die pixeldaten speicher kommt beim ca. 40ten
ein große zahl über 255 und dies wiederholt sich in unterschiedlichen abständen.
daher ist da mein auslesen falsch, ich begreifa aber nicht warum!
mfg Slazer
 
Zurück