開発環境 |
Microsoft Visual C++ 2010 Express (SP1) |
実行環境 |
Microsoft Windows XP Home Edition (SP3) |
プロジェクトの種類 |
Win32 コンソール アプリケーション |
プロジェクト名 |
test |
アプリケーションの種類 |
コンソール アプリケーション |
追加のオプション |
空のプロジェクト |
- #pragma packを使用することにより構造体の隙間を詰めることができる。
- ビットフィールドのメンバーの型はサブ構造体の大きさに合わせる。たとえばUINTにすると4バイトになるがUCHARでは1バイトになる。
- ビットフィールドは最小位ビットから記述する。
test.c
#include <stdio.h>
#include <Windows.h>
#pragma pack(push, 1)
typedef struct {
UCHAR aucSignature[3];
UCHAR aucVersion[3];
USHORT usLogicalScreenWidth;
USHORT usLogicalScreenHeight;
struct {
UCHAR SizeofGlobalColorTable: 3; // 00000???
UCHAR SortFlag: 1; // 0000?000
UCHAR ColorResolution: 3; // 0???0000
UCHAR GlobalColorTableFlag: 1; // ?0000000
} ucbf; // BitField
UCHAR ucBackgroundColorIndex;
UCHAR ucPixelAspectRatio;
} GIFHeader;
#pragma pack(pop)
void main()
{
printf("%u\n", sizeof (GIFHeader));
}
実行
13
最終更新:2012年09月01日 16:49