我有一个 7 字节/56 位的位集,在构造时将第一位设置为一个:
boost::dynamic_bitset<> b(56, 1);
构建后,我想将一个整数值(比如 2019 年)放入第 4 位到第 15 位。我很好奇 boost 中是否有一种简单的方法可以在没有位运算的情况下做到这一点?基本上,我想将一系列位设置为一个整数值,我知道该整数值足够小以适合这些位。感谢您的任何建议。
我有一个 7 字节/56 位的位集,在构造时将第一位设置为一个:
boost::dynamic_bitset<> b(56, 1);
构建后,我想将一个整数值(比如 2019 年)放入第 4 位到第 15 位。我很好奇 boost 中是否有一种简单的方法可以在没有位运算的情况下做到这一点?基本上,我想将一系列位设置为一个整数值,我知道该整数值足够小以适合这些位。感谢您的任何建议。
提供的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);