私はビットを扱うのは初めてです。3つの異なるタイプのメッセージを送信できる既存のプロトコルを使用しようとしています。
タイプ1は16ビット構造です。
struct digital
{
unsigned int type:2;
unsigned int highlow:1;
unsigned int sig1:5;
unsigned int :1;
unsigned int sig2:7;
};
最初の2ビット(上記の私の構造ではタイプ)は常に10です。3番目のビットhighlowは、信号がオンかオフかを決定し、sig1+sig2が一緒になって信号の12ビットインデックスを定義します。このインデックスは、常にビット7にある0によって2バイトに分割されます。
タイプ2は32ビット構造です。2ビットタイプ、10ビットインデックス、16ビット値があり、27、23、15、7の位置に0が点在しています。ビットフィールド構造体表現は次のようになります。
struct analog
{
unsigned int type:2;
unsigned int val1:2;
unsigned int :1;
unsigned int sig1:3;
unsigned int :1;
unsigned int sig2:7;
unsigned int :1;
unsigned int val2:7;
unsigned int :1;
unsigned int val3:7;
};
sig1とsig2が一緒になって10ビットのインデックスを形成します。val1 + val2 + val3は一緒になって、10ビットインデックスで信号の16ビット値を形成します。
最初の2つの構造体の操作方法を理解すれば、3番目の構造体を理解できると思います。
私の質問は、単一の値を割り当てて、プログラムにval1、val2、およびval3に入る必要のあるビットを処理させる方法はありますか?
ビットシフト、ビットフィールド構造体、および0によるパディングについて読みました。構造体は進むべき道のように見えますが、それを実装する方法がわかりません。私が見たビットパッキングの例のどれも、これらのように分割された値を持っていません。最終的には、アナログ構造体を作成し、インデックス(i = 252)と値(v = 32768)を割り当てて、それを実行できるようにしたいと思います。
誰かが適切な方法を提案したり、同様のサンプルへのリンクを提供したりできれば、私はそれを大いに感謝します。重要な場合、このコードはより大きなObjective-Cアプリに組み込まれます。
ありがとう。
ブラッド