私はかなり大きなビットセットを持っています:
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();
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