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位的组。 到目前为止:

  • bs.to_字符串()
  • 拆分为大小为8的字符串向量
  • 从这些字符串创建新的位集并调用_ulong()
  • 有更好的解决办法吗?性能至关重要,因为我在程序中多次调用此方法。

    有运算符
    >

    如果您只想访问该值并读取它,可以使用下面的代码。它将第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:嗯,这个更新版本怎么样:-)