Dziwny problem odczytu struktury

0

Witam, próbuję odczytać nagłówek pliku bmp. Napisałem kod:

type
  naglowekBmp=record
    bfType:word;
    bfSize:integer;
    bfReserved1:word;
    bfReserved2:word;
    bfOffBits:integer;
    biSize:integer;
    biWidth:integer;
    biHeight:integer;
    biPlanes:word;
    biBitCount:word;
    biCompression:integer;
    biSizeImage:integer;
    biXPelsPerMeter:integer;
    biYPelsPerMeter:integer;
    biClrUsed:integer;
    biClrImportant:byte;
    biClrRotation:byte;
    biReserved:word;

  end;

var
  plik:file;
  zmBMP:naglowekBmp;
  x:word;
  y:integer;

begin
  assign(plik, 'E:\Users\Loganek\Pictures\beztyt.bmp');
  reset(plik, 1);
  blockread(plik, zmBMP, sizeof(zmBMP));
  reset(plik, 1);
  blockread(plik, x, sizeof(x));
  blockread(plik, y, sizeof(y));

  writeln(zmBMP.bfSize, ' ', y);
end.

O dziwo na wyjściu pojawia się:
0 334
Oczywiście wartość 334 jest poprawna.
Może ktoś mi wytłumaczyć, dla czego gdy próbuję pobrać dane do struktury, nie udaje się to, a kiedy do pojedynczych zmiennych, jest ok?
Z góry dzięki za pomoc
Pozdrawiam

0

Najwyraźniej tam nie ma tego nagłówka, a przynajmniej nie w tym miejscu.

0

jest na pewno, bo sprawdzałem w hex-edytorze. A poza tym, odczytując wartości do pojedynczych zmiennych, program zwraca poprawny wynik.

0

wg mnie, to nigdzie nie widziałem recordu, który tworzyłby jakiś obiekt, ale wielka praca przed Tobą :)

0

To może odczytaj za pomocą TFileStream. Lub jak plik typowany, chociaż to trochę głupie.

0
MiM napisał(a)

wg mnie, to nigdzie nie widziałem recordu, który tworzyłby jakiś obiekt, ale wielka praca przed Tobą :)
co ty [CIACH!]??

zamiast record daj packed record

0

nie używaj integer

 (liczby ze znakiem) do pól które oczywiście są bez znaku, jak size, width czy height. użyj wszędzie typu <code noframe>longword

no i packed record, jak już ci powiedzieli.

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