2011-07-21 4 views
0

私はビット単位の操作にMACROSを使用せず、むしろBitSetを使用することにしました。基本的に私がやろうとしていることは、構造体がそのビットを評価して別の構造体に貼り付けられることです。ビットセットをストラクチャフィールドに保存

私は、構造体を受け取ると言う:

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

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

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

、後私は、別の構造体への受信ビットをappenedする必要があり、評価は言う:

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 ::ビットセット< 16U>」割り当て

の「uint16の」に私が変更したくありません構造体のフィールド型、どうすればいいですか?私は愚かなことが私の質問であることをお詫びします。予め

答えて

3

unsigned longとしてセットのビットを返す使用std::bitsetのメンバ関数to_ulong、で

おかげ。

+0

ありがとうございました。 – newbieLinuxCpp