2012-04-01 47 views
1

我有一個7字節/ 56位的位集使得在施工設置第一比特到一個:升壓來,dynamic_bitset - 把一個整數值的範圍內的位

boost::dynamic_bitset<> b(56, 1); 

施工結束後,我想把一個整數值(比如說2019)放到第4到第15位。我很好奇,在沒有按位操作的情況下,是否有一種簡單的方法可以實現這一點?基本上,我想將一個範圍的位設置爲一個整數值,我知道它足夠小以適應這些位。感謝您的任何建議。

回答

4

boost::dynamic_bitset<>提供的功能非常少。我認爲唯一的可能性是使用一個普通的循環:

template <typename Bitset> 
void set_in_range(Bitset& b, unsigned value, int from, int to) 
{ 
    for (int i = from; i < to; ++i, value >>= 1) 
    b[i] = (value & 1); 
} 

boost::dynamic_bitset<> b(56, 1); 
set_in_range(b, 2019, 4, 15); 
+0

這是有效的。謝謝你的答案。 – 01100110 2012-04-01 19:10:19

+0

您需要在for循環中使用'i <= to'而不是'我< – 01100110 2012-04-01 19:22:00