(2005-12の一覧)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

構造体でビットフィールド
2005-12-04-1 / カテゴリ: [programming][c] / [permlink]

独習Cにも載ってたけど気づかなかった。
構造体のメンバに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]
前の日 / 次の日 / 最新 / 2005-12

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