開発環境 Microsoft Visual C++ 2010 Express (SP1)
実行環境 Microsoft Windows XP Home Edition (SP3)
プロジェクトの種類 Win32 コンソール アプリケーション
プロジェクト名 test
アプリケーションの種類 コンソール アプリケーション
追加のオプション 空のプロジェクト

  • #pragma packを使用することにより構造体の隙間を詰めることができる。
  • ビットフィールドのメンバーの型はサブ構造体の大きさに合わせる。たとえばUINTにすると4バイトになるがUCHARでは1バイトになる。
  • ビットフィールドは最小位ビットから記述する。

参考
GIFフォーマットの詳細 http://www.tohoho-web.com/wwwgif.htm

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