2015-11-03 1 views
2

Мне нужно создать 24-битный набор. Сначала бит (0) должен быть установлен bool. И другие (1 - 23) Мне нужно скопировать первые биты из значения uint32boost dynamic_bitset копирует бит из uint16

Возможно ли это сделать с помощью dynamic_bitset?

Мой код, который я попробовал, но не так:

typedef boost::dynamic_bitset<unsigned char> DataType; 
DataType bs(24, intValue); 
bs.set(0, booleanValue); 

ответ

1

Только левый сдвиг:

DataType bs(24, intValue); 
    bs <<= 1; 
    bs.set(0, boolValue); 

Live On Coliru

#include <boost/dynamic_bitset.hpp> 
#include <iostream> 
typedef boost::dynamic_bitset<unsigned char> DataType; 

int main() { 
    using namespace std; // for readability on SO 
    cout << hex << showbase; 

    uint32_t intValue = 0x666; 
    cout << "input: " << intValue; 

    DataType bs(24, intValue); 

    cout << "\n#1: " << bs << " " << bs.to_ulong(); 

    bs <<= 1; 
    cout << "\n#2: " << bs << " " << bs.to_ulong(); 

    bs.set(0, true); 

    cout << "\n#3: " << bs << " " << bs.to_ulong(); 
} 

распечаток:

input: 0x666 
#1: 000000000000011001100110 0x666 
#2: 000000000000110011001100 0xccc 
#3: 000000000000110011001101 0xccd 
+0

Спасибо за исправление. Но этот код заменит 0-й бит значения int в битете с помощью boolean. – user1717140

+0

Обновлен после повторного редактирования отредактированного вопроса. [Live on Coliru] (http://coliru.stacked-crooked.com/a/c04ac88b05dd1f33) – sehe

0

Таким образом, мне удалось сделать это таким образом, без наддува BitSet:

uint32_t buffer(0xAAAAAAAA); 
buffer = buffer << 1; 
buffer |= true << 0; 

unsigned char newRecord[3]; 

newRecord[0] = buffer; 
newRecord[1] = buffer << 8; 
newRecord[2] = buffer << 16; 
+0

'true << 0' - то, что пытается достичь – sehe