4

我有一个相当大的位集:

bitset<128*8> bs;

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

  1. bs.to_string()
  2. 拆分为大小为 8 的字符串向量
  3. 从这些字符串创建一个新的位集并调用 to_ulong()

有更好的解决方案吗?性能至关重要,因为我在程序中多次调用此方法。

4

2 回答 2

2

std::bitset有运营商>>

如果您只想访问该值并读取它,您可以使用下面的代码。它将第 N8 位读取为uint8_t

bitset<128*8> mask(0xFF);
uint8_t x = ((bs >> N * 8) & mask).to_ulong();
于 2013-05-25T22:40:32.497 回答
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;
}   

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

于 2013-05-25T22:42:26.523 回答