我有一个相当大的位集:
bitset<128*8> bs;
我想访问 8 位组。到目前为止的情况如何:
- bs.to_string()
- 拆分为大小为 8 的字符串向量
- 从这些字符串创建一个新的位集并调用 to_ulong()
有更好的解决方案吗?性能至关重要,因为我在程序中多次调用此方法。
std::bitset
有运营商>>
。
如果您只想访问该值并读取它,您可以使用下面的代码。它将第 N个8 位读取为uint8_t
:
bitset<128*8> mask(0xFF);
uint8_t x = ((bs >> N * 8) & mask).to_ulong();
你可以做这样的事情来避免创建字符串和一些复制:
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;
}
但您可能需要根据您的字节顺序处理索引