C++でビットアクセス
環境とコンパイラのバージョン
- CentOS7 64bit
- clang 3.4.2
FooBar構造体を定義して1bit(bit0)のfooと3bit(bit1-3)のbarを定義して、1byteの値cをキャストして取り出しています。
#include <stdio.h> struct FooBar { unsigned char foo:1; // bit0 unsigned char bar:3; // bit1-3 unsigned char baz:4; // bit4-7 }; int main(int argc, char** argv) { unsigned char c; c = 0b00001101; // 1 = 1 // 110 = 6 // foo: 1, bar: 6 printf("foo: %d, bar: %d\n", ((FooBar&) c).foo, ((FooBar&) c).bar); }