次のエントリ: 今日の戦利品 [ぬいぐるみ]
構造体でビットフィールド
2005-12-04-1 / カテゴリ: [programming][c] / [permlink]
独習Cにも載ってたけど気づかなかった。
構造体のメンバにchar(1バイト)以下の単位で、ビット単位のメンバを持たせることができる。
このビットフィールドと共用体を併用すれば、ビット演算使わずに base64 エンコード/デコードできるかなーと思ったけど、sizeof(struct foo) は 4. パディングはしっかり入ってるのね...
構造体のメンバにchar(1バイト)以下の単位で、ビット単位のメンバを持たせることができる。
struct foo {
int a: 1; // 1ビットの領域
int b: 3; // 3ビットの領域
int c: 2; // 2ビットの領域
};
true/false の2値しか必要ないとかに使える。このビットフィールドと共用体を併用すれば、ビット演算使わずに base64 エンコード/デコードできるかなーと思ったけど、sizeof(struct foo) は 4. パディングはしっかり入ってるのね...
struct fromdata {
unsigned char first;
unsigned char second;
unsigned char third;
};
struct todata {
unsigned first: 6;
unsigned second: 6;
unsigned third: 6;
unsigned forth: 6;
};
union base64 {
struct fromdata from;
struct todata to;
};
int main() {
printf("from: %d\n", sizeof(struct fromdata));
printf("to: %d\n", sizeof(struct todata));
return 0;
}
結果はfrom: 3 to: 4うーん
Referrer (Inside):
[2005-12-08-1]
[
コメント ]
次のエントリ: 今日の戦利品 [ぬいぐるみ]
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2013-05-02 16:12
