Решил написать класс для манипуляции BMP изображениями. Поскольку мне не нравится стиль WinAPI кода решил переопределить структуры BITMAPFILEHEADER
и BITMAPINFOHEADER
, но столкнулся со странной проблемой: размер переопределённой структуры больше размера WinAPI-структуры.
Код:
WinAPI:
typedef unsigned short WORD;
typedef unsigned long DWORD;
// ...
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
Мой код:
using Byte = unsigned char;
using Word = unsigned short;
using Dword = unsigned long;
// ...
struct FileHeader {
Word type = 0x4D42;
Dword size;
Word reserved1 = 0;
Word reserved2 = 0;
Dword offsetBits;
};
Суть проблемы:
size_t winApi = sizeof(BITMAPFILEHEADER); // = 14
size_t my = sizeof(FileHeader); // = 16
Не могу понять почему размеры различаются.
Вероятно, используемое вашим компилятором выравнивание по умолчанию приводит к таким фокусам. Укажите явно выравнивание хотя бы на 2 байта, а не на 4.
В VC++ примерно так:
#pragma pack(push,1)
... СТРУКТУРА
#pragma pack(pop)
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как работать с tun на с++ и обрабатывать пакеты +Можете ли скинуть какой-нить материал по TUN
Есть задача, с бинарной системы исчисления провести корреляцию, то есть с 1001 должно выйти 10010110Каждая единица это 10, а ноль это 01
У меня есть участок кода, который в определённых случаях генерирует ошибку, которую мне никак не удаётся понятьСвязана она с освобождением...