今、MPEGのヘッダをビットフィールドを使って読み込もうと
しているのですが、下記の構造体 Struct1 のサイズが4になりません。
Struct2のように分割せずに取り込む方法しか無いのでしょうか。
又、Struct3のようにHorizontalSizeをCharにすると1Byte増える理由は
なんでしょうか?
環境はVC++6.0+Sp5です。
以上、よろしくお願いします。
#pragma pack(push, 1 ) // Pack 1 にしてpush
typedef struct _Struct1
{
unsigned char BitRate:4;
unsigned char AspectRatio:4;
unsigned short VerticalSize:12;
unsigned short HorizontalSize:12;
} Struct1;
typedef struct _Struct2
{
unsigned char BitRate:4;
unsigned char AspectRatio:4;
unsigned short VerticalSize:12;
unsigned short HorizontalSize:4;
unsigned char HorizontalSize1:8;
} Struct2;
typedef struct _Struct3
{
unsigned char BitRate:4;
unsigned char AspectRatio:4;
unsigned short VerticalSize:12;
unsigned char HorizontalSize:4;
unsigned char HorizontalSize1:8;
} Struct3;
#pragma pack( pop )
int main(int argc, char* argv[])
{
printf(Struct1 size=%d\n,sizeof(Struct1));
printf(Struct2 size=%d\n,sizeof(Struct2));
printf(Struct3 size=%d\n,sizeof(Struct3));
return 0;
}
結果:
Struct1 size=5
Struct2 size=4
Struct3 size=5
以下で、うまくいきました。たまたま、最後が4バイト境界に
乗っただけかもしれませんが。
typedef struct _Struct1
{
unsigned BitRate:4;
unsigned AspectRatio:4;
unsigned VerticalSize:12;
unsigned HorizontalSize:12;
} Struct1;