Bitset分裂为字符

时间:2013-05-25 22:14:17

标签: c++ bitset

我有一个很大的位置:

bitset<128*8> bs;

我想访问8位组。 到目前为止的情况:

  1. bs.to_string()
  2. 拆分为大小为8的字符串向量
  3. 从这些字符串创建一个新的bitset并调用to_ulong()
  4. 有更好的解决方案吗?性能至关重要,因为我在我的程序中多次调用此方法。

2 个答案:

答案 0 :(得分:2)

std::bitset有运营商>>

如果您只想访问该值并阅读它,则可以使用以下代码。它将N th 8位读为uint8_t

bitset<128*8> mask(0xFF);
uint8_t x = ((bs >> N * 8) & mask).to_ulong();

答案 1 :(得分:1)

你可以这样做,以避免创建字符串和一些复制:

for (uint32_t i = 0; i < bs.size(); i+=8) {
    uint32_t uval = 0;
    for (uint32_t j = 0; j < 8; j++) {
        uval = (uval << 1) + bs[i + 7 - j]; 
    }   
    std::cout << uval << std::endl;
}   

但您可能需要根据您的字节顺序处理索引