ビットフィールドとアラインメント – プログラミング – Home

ビットフィールドとアラインメント
 
通知
すべてクリア

[解決済] ビットフィールドとアラインメント


ボコノン教徒
 ボコノン教徒
(@ボコノン教徒)
ゲスト
結合: 23年前
投稿: 90
Topic starter  

今、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


引用未解決
トピックタグ
ボコノン教徒
 ボコノン教徒
(@ボコノン教徒)
ゲスト
結合: 23年前
投稿: 90
Topic starter  

以下で、うまくいきました。たまたま、最後が4バイト境界に
乗っただけかもしれませんが。

typedef struct _Struct1
{
unsigned BitRate:4;
unsigned AspectRatio:4;
unsigned VerticalSize:12;
unsigned HorizontalSize:12;
} Struct1;


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました