2015-11-03 31 views
2

我需要创建24位的set。 首先(0)位必须由bool设置。 和其他(1 - 23)我需要从uint32中复制第一位数值boost uint16的dynamic_bitset拷贝位

是否可以使用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

感谢纠正。但是这段代码将用布尔值替换bitset中的int值的第0位。 – user1717140

+0

重新阅读编辑后的问题后更新。 [Live 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