비트 맵 (.bmp) 이미지 헤더를 struct
으로 읽으려고합니다. c.구조체에 fread가 데이터를 잘못 읽습니다.
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef struct _BITMAPFILEHEADER {
WORD Type;
DWORD Size;
WORD Reserved1;
WORD Reserved2;
DWORD OffBits;
} BITMAPFILEHEADER;
비트 맵 파일을 읽을 수있는 내 코드
FILE *fp;
BITMAPFILEHEADER header;
fp = fopen(file,"rb");
if (fp == NULL) {
printf("cannot open file!\n");
return 1;
}
fread(&header, sizeof(BITMAPFILEHEADER), 1, fp);
printf("Type: %02x\n", header.Type);
printf("Size: %04x\n", header.Size);
printf("Reserved: %02x\n", header.Reserved1);
printf("Reserved: %02x\n", header.Reserved2);
printf("Offset: %04x\n", header.OffBits);
은 무엇 모두 같아야합니다 :
유형 : 0x424d
크기 : 0x00060436
한 Reserved1 : 0x00
Reserved2을 : 0x00
오프셋 : 실제로 (printf와 출력) happning 무엇 0x00000436
:
유형 : 0x424d
크기 : 0x0006
가 예약 : 0x002
가 예약 : 0x436
오프셋 : 0x280000
(내 os는 도움이된다면 32 비트 우분투)
고정 너비 정수가 필요한 경우 표준에서 제공하는 정수를 사용하십시오. 자작 나무 종류를 사용하지 마십시오. 또한 abolut'struct' 레이아웃과 옥텟 스트림을 적절하게 직렬화/마샬링하는 방법을 읽으십시오. – Olaf
http://c-faq.com/struct/io.html, http://c-faq.com/struct/padding.html – melpomene
데이터는 어떻게 파일에 기록 되었습니까? 데이터를 읽을 때 작성된 방식을 모방해야합니다.구조체에 패딩이있는 경우 (거의 확실하게) 데이터가 단편적으로 작성되었지만 (패딩이없는 경우처럼) 데이터를 읽은 것처럼 읽을 수 없습니다. 별도의'fread()'연산을 통해 각 원소를 차례대로 읽어 들여야하고'fread()'가 성공했다고 확신하는지 확인한 후에 반환 할 것이라고 생각하는 것을 사용해야한다. –