У меня довольно большой битсет:
bitset<128*8> bs;
Я хотел бы иметь доступ к группам из 8 бит.
Что из этого до сих пор:
Есть ли лучшее решение? Производительность имеет решающее значение, так как я вызываю этот метод несколько раз в моей программе.
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;
}
но вам может понадобиться работать с индексами в зависимости от вашего порядка