Сохранить набор битов в поле структуры - PullRequest
0 голосов
/ 21 июля 2011

Я решил не использовать 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;

Я хочу назначить биты в поле структуры, я получаю эту ошибку: не могу преобразовать ‘std :: bitset <16u> ’в‘ uint16 ’в назначении

Я не хочу менять тип поля структуры, что я могу сделать? Я прошу прощения за то, насколько глупым является мой вопрос.

Заранее спасибо

1 Ответ

3 голосов
/ 21 июля 2011

Используйте функцию-член std::bitset to_ulong, которая возвращает биты в наборе как unsigned long.

...