Локально отключить заполнение - PullRequest
16 голосов
/ 20 января 2012

Я пишу парсер для некоторой структуры данных, после нескольких часов отладки я обнаружил, что проблема в том, что Visual Studio не интерпретирует структуры, как я говорю.Кажется, используется некоторое «дополнение»

struct foo { 
unsigned char a; //0x00
unsigned char b; //0x01
unsigned int c; //0x02
unsigned int d; //0x06
unsigned int e; //0x0A
unsigned int f; //0x0E
//0x12
};

Я ожидал "sizeof (foo) = 4 * 4 + 2 = 18", но я получил "sizeof (foo) = 20".Есть ли возможность отключить заполнение только для этой специальной структуры?Я пытался

__declspec(align(1)) struct foo { ...

, но это не работает.Спасибо за вашу помощь.

Ответы [ 2 ]

35 голосов
/ 20 января 2012

Для этого используйте директиву #pragma pack:

#pragma pack(push, 1)
struct foo { 
  // etc..
};
#pragma pack(pop)
2 голосов
/ 20 января 2012

Visual Studio 2010 имеет #pragma pack для того, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...