В настоящее время я работаю над C-проектом, где я должен скрывать текст в изображении .bmp.Различные значения структуры в Linux и Windows
Поэтому я открываю изображение и написать заголовок файла и информационный заголовок в двух структурах:
typedef struct _BitmapFileHeader_
{
uint16_t bfType_;
uint32_t bfSize_;
uint32_t bfReserved_;
uint32_t bfOffBits_;
}
__attribute__((packed))
BitmapFileHeader;
typedef struct _BitmapInfoHeader_
{
uint32_t biSize_;
int32_t biWidth_;
int32_t biHeight_;
uint16_t biPlanes_;
uint16_t biBitCount_;
uint32_t biCompression_;
uint32_t biSizeImage_;
int32_t biXPelsPerMeter_;
int32_t biYPelsPerMeter_;
uint32_t biClrUsed_;
uint32_t biClrImportant_;
}BitmapInfoHeader;
BitmapFileHeader* bitmap_headerdata = NULL;
BitmapInfoHeader* bitmap_infodata = NULL;
имя файла определено ранее
int readBitmapFile (char* filename, BitmapFileHeader** bitmap_headerdata,
BitmapInfoHeader** bitmap_infodata, unsigned char** bitmap_colordata)
{
FILE* bmp_file;
bmp_file = fopen(filename, "rb");
fseek(bmp_file, 0, SEEK_SET); // Set File Cursor to beginning
fread((*bitmap_headerdata), sizeof(**bitmap_headerdata), 1, bmp_file);
fseek(bmp_file, sizeof(**bitmap_headerdata), SEEK_SET);
fread((*bitmap_infodata), sizeof(**bitmap_infodata), 1, bmp_file);
int checkinfo = sizeof(**bitmap_infodata);
int checkheader = sizeof(**bitmap_headerdata);
printf("Size of Infodata: %d\nSize of Headerdata: %d\n", checkinfo, checkheader);
....
}
Когда я открываю правильный Bitmap (24bit, не сжатый), и я сравниваю значения bfType_, biBitCount и biCompression с 19778,24,0 на Linux, он работает отлично, но когда я пытаюсь запустить его в Windows, программа останавливается, когда сравнивает biBitCount с 24. Когда я отлаживал программу I заметил, что все Значения из «bitmap_infodata» - это одна строка выше, откуда они должны быть (когда я смотрю на нее как на таблицу). Затем я сравнил sizeof (** bitmap_headerdata) с Linux и Windows и заметил, что это 14 на Linux и 16 на Windows?
Не должно быть одинаковым? И почему структура bitmap_headerdata имеет одинаковые значения для обеих ОС, но bitmap_infodata отличается?
Бернхард
Какой компилятор вы используете на окнах? – nos
Вы предполагаете, что структуры выложены одинаково на разных компиляторах/платформах. –
Вы были разбиты по памяти. Проверка 'sizeof (BitmapFileHeader)' на обеих платформах – Tibo