質問

少し詰め込まれた構造体の内部に配列が欲しいです。配列のサイズ(32)を静的に知っています。配列内の各要素が1つのビットであることを望んでいます。たとえば、次のようなことを言いたいです。

struct example_s {
  // ...
  unsigned int flags[32] : 32;
} __attribute__((__packed__));

私はいくつかのことを試しましたが、GCCは動揺しません。これを行うことができて、梱包された配列の要素を反復するクリーンコードを書くことができるといいでしょう。アイデア?

役に立ちましたか?

解決

単に(32ビット)INTに入れた場合、このようなループを使用してビットをきれいに反復させることができます。

for (bit = 0; bit < 32; bit++)
    flagValue = ((flags & (1<<bit)) != 0;

配列のインデックス作成構文よりも書くのはそれほど難しくありません。

コードをより読みやすくするためにビットツイドリングを非表示にしたい場合は、関数やマクロを使用してビットにアクセスすることもできます。 GetFlag(bit)

他のヒント

Bitfieldメンバーの要素にはアドレスがないため、それらの配列を宣言できたとしても、それを使用する方法はありません(Cのすべての配列アクセスはポインター算術と繰り込み式です)。ただし、より大きなタイプのビットを使用して独自のビット配列をコーディングするのは簡単です。ジェイソンは基本を説明しました。通常、本当に正当な理由がない限り、ビットフィールドの使用を避ける必要があります。彼らは通常、彼らが価値があるよりも多くのトラブルです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top