2009年6月24日水曜日

ビット単位でアクセス

C言語でビット単位で変数を操作する方法を考えてみました。マイコンのレジスタを操作するときに使うことを想定しています。

下のプログラムは、コマンドライン引数で指定した数字を2進数と16進数で表示するものです。

#include <stdio.h>
#include <string.h>

typedef union BitAccess {
unsigned int byte : 8;
struct {
unsigned int bit0 : 1;
unsigned int bit1 : 1;
unsigned int bit2 : 1;
unsigned int bit3 : 1;
unsigned int bit4 : 1;
unsigned int bit5 : 1;
unsigned int bit6 : 1;
unsigned int bit7 : 1;
};
} BitAccess;

void printBinary(int number) {
BitAccess port = { number };

puts("+------+---+---+---+---+---+---+---+---+");
puts("| No. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |");
puts("+------+---+---+---+---+---+---+---+---+");
printf("| Bit | %d | %d | %d | %d | %d | %d | %d | %d |\n",
port.bit7,
port.bit6,
port.bit5,
port.bit4,
port.bit3,
port.bit2,
port.bit1,
port.bit0);
puts("+------+---+---+---+---+---+---+---+---+");
printf("| Byte | 0x%02x |\n", port.byte);
puts("+------+---+---+---+---+---+---+---+---+");
}

int main(int argv, char **argc) {
printBinary(atoi(argc[1]));
return 0;
}

0 件のコメント: