0

ビット演算に MACROS を使用せず、BitSet を使用することにしました。基本的に私がやろうとしているのは、構造体を受け取り、そのビットを評価してから、それらを別の構造体に追加することです。

Struct を受け取ります。次のように言います。

typedef struct{
uint8 status; //!< Status
} MsgStatus;

ステータスを取得し、受信した各ビットをチェックする必要があるため、受信した構造体のビットセットを作成します。

m_msgBits = new MsgStatus();
bitset<8> msgBits(m_msgBits->status);
// I evaluate the bits 

さて、評価の後、受信したビットを別の構造体に追加する必要があります。

typedef struct{
uint32 status; //!< Status
} MsgOverallStatus;

だから、私がすることは:

m_OverallStatus = new MsgOverallStatus();
bitset<16> overallBits(m_OverallStatus->status);
m_OverallStatus.reset(); // 00000000 00000000

//Then append bits in msgBits in overallBits, for example:
overallBits.set(0, msgBits[0]);
overallBits.set(1, msgBits[1]);
overallBits.set(2, msgBits[2]);

//==== HERE WHERE I DUNNO HOW TO DO IT ====
m_OverallStatus->status = overallBits;

ビットを構造体フィールドに割り当てたいのですが、次のエラーが表示されます: 代入で 'std::bitset<16u>' を 'uint16' に変換できません

構造体フィールドの型を変更したくないので、どうすればよいですか? 私の質問がどれほど愚かであるかをお詫びします。

前もって感謝します

4

1 に答える 1

3

としてセット内のビットを返すstd::bitsetのメンバー関数を使用します。to_ulongunsigned long

于 2011-07-21T10:06:26.680 に答える