2011-07-21 60 views
0

我暫時不使用MACROS進行按位操作,而是使用BitSet。基本上我打算做的是,我收到一個結構評估它的位,然後將它們附加到另一個結構。將位集保存到結構體字段中

我收到一個結構,說:

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

我需要的狀態和檢查每個接收到的比特,所以我創建了recevied結構的一個bitset:

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」

我不想改變struct字段類型,那麼我該怎麼辦?我很抱歉我的問題有多愚蠢。

預先感謝

回答

3

使用std::bitset的成員函數to_ulong,它返回集合中的作爲unsigned long的位。

+0

非常感謝:) – newbieLinuxCpp