C++ 位集拆分为字符
我有一个相当大的比特集:C++ 位集拆分为字符,c++,bitset,C++,Bitset,我有一个相当大的比特集: bitset<128*8> bs; 位集b; 我想访问8位的组。 到目前为止: bs.to_字符串() 拆分为大小为8的字符串向量 从这些字符串创建新的位集并调用_ulong() 有更好的解决办法吗?性能至关重要,因为我在程序中多次调用此方法。有运算符> 如果您只想访问该值并读取它,可以使用下面的代码。它将第N个8位读取为uint8\u t: bitset<128*8> mask(0xFF); uint8_t x = ((bs >>
bitset<128*8> bs;
位集b;
我想访问8位的组。
到目前为止:
>
如果您只想访问该值并读取它,可以使用下面的代码。它将第N个8位读取为uint8\u t
:
bitset<128*8> mask(0xFF);
uint8_t x = ((bs >> N * 8) & mask).to_ulong();
位集掩码(0xFF);
uint8_t x=((bs>>N*8)和掩码);
您可以这样做以避免创建字符串和一些复制:
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;
}
(uint32_t i=0;i{
uint32_t uval=0;
对于(uint32_t j=0;j<8;j++){
uval=(在进行了一些基本的谷歌搜索之后,我建议编写一个自己的包装类(可能来自bitset
),它支持按字符访问。听起来你几乎想要一个char[]
(或std::array
)。std::vector(128)
?我使用该类型作为键,因此如果位集不能用无符号长格式表示,我需要使用可哈希类型来引发溢出异常。@BartlomiejLewandowski:嗯,这个更新版本怎么样:-)