[C]Problem z odczytem pliku bmp

0

Męczę się z odczytem pliku bmp, obciąłem już nawet nagłówek do dwóch zmiennych i mam dziwny błąd... tak wygląda nagłówek :

typedef struct HANDLEBMP2
{
   short bfType;  // Sygnatura pliku BMP: 4D42h ("BM")
   int bfSize;  // Dlugosc calego pliku
} HANDLEBMP2;

HANDLEBMP2 handle;

i kiedy odczytuje to w ten sposób:

        fread(&handle.bfType, 2, 1, plik);
        fread(&handle.bfSize, 4, 1, plik);

to zmienna bfSize ma dobrą wartość, ale gdy próbuje odczytać nagłówek jako całość

 fread(&handle, 1, sizeof(HANDLEBMP2), plik);  

to już jest niepoprawna wartość :-/ żeby było śmiesznie to odczytanie danych z tak pobranego nagłówka w ten sposób:

 int tmp = (int)(((short*)&handle)[1]) + (int)(((short*)&handle)[2])*65536;

lub :

  int tmp = *((int*)((char*)&handle+2));

Daj poprawny wynik :| nie rozumiem już co jest źle, z góry dzięki za pomoc ...

0

Już mniej więcej wiem w czym problem, policzyłem offset względem handle dla handle.bfSize

int offset = (long int)&handle.bfSize - (long int)&handle; 

I się zdziwiłem =P wyszło 4.... a przecież powinno wyjść 2 :-/ bo przed nią jest jedna zmienna typu short.
Domyślam się że to tak jak w ASM włączone jest adresowanie co 4 bajty, ale jak to wyłączyć?

0

Spróbuj tak:

#pragma pack(push,1)

typedef struct
{
   short bfType;  // Sygnatura pliku BMP: 4D42h ("BM")
   int bfSize;  // Dlugosc calego pliku
} HANDLEBMP2;

#pragma pack(pop)
0

Wielkie dzięki :) zadziałało

1 użytkowników online, w tym zalogowanych: 0, gości: 1