将位集保存到结构域中

时间:2011-07-21 09:29:25

标签: c++ struct bitset

我认为不使用MACROS进行按位操作,而是使用BitSet。基本上我打算做的是,我收到一个结构,评估它的位然后将它们添加到另一个结构。

我收到一个结构,说:

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;

我想将这些位分配给struct字段,我得到这个错误:无法在赋值中将'std :: bitset&lt; 16u&gt;'转换为'uint16'

我不想更改struct字段类型,所以我该怎么办?我为我的问题多么愚蠢而道歉。

提前致谢

1 个答案:

答案 0 :(得分:3)

使用std::bitset的成员函数to_ulong,它将集合中的位作为unsigned long返回。