次のエントリ: 今日の戦利品 [ぬいぐるみ]
構造体でビットフィールド
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