4

私はかなり大きなビットセットを持っています:

bitset<128*8> bs;

8 ビットのグループにアクセスしたいと思います。これまでのところどうですか:

  1. bs.to_string()
  2. サイズ 8 の文字列のベクトルに分割します
  3. これらの文字列から新しいビットセットを作成し、to_ulong() を呼び出します

より良い解決策はありますか?プログラムでこのメソッドを複数回呼び出すため、パフォーマンスは非常に重要です。

4

2 に答える 2

2

std::bitset演算子があり>>ます。

値にアクセスして読み取るだけの場合は、以下のコードを使用できます。N番目の 8 ビットを次のように読み取りますuint8_t

bitset<128*8> mask(0xFF);
uint8_t x = ((bs >> N * 8) & mask).to_ulong();
于 2013-05-25T22:40:32.497 に答える
1

You can do something like this to avoid creating strings and some copying:

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;
}   

but you may need to work on the indices depending on your endianness

于 2013-05-25T22:42:26.523 に答える