Битсет разделен на символы

У меня довольно большой битсет:

bitset<128*8> bs;

Я хотел бы иметь доступ к группам из 8 бит.
Что из этого до сих пор:

  1. bs.to_string ()
  2. разбить на вектор строки размером 8
  3. создайте новый набор битов из этих строк и вызовите to_ulong ()

Есть ли лучшее решение? Производительность имеет решающее значение, так как я вызываю этот метод несколько раз в моей программе.

4

Решение

std::bitset имеет оператора >>,

Если вы хотите просто получить доступ к значению и прочитать его, вы можете использовать приведенный ниже код. Это читает N го 8 бит как uint8_t:

bitset<128*8> mask(0xFF);
uint8_t x = ((bs >> N * 8) & mask).to_ulong();
2

Другие решения

Вы можете сделать что-то вроде этого, чтобы избежать создания строк и некоторого копирования:

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

но вам может понадобиться работать с индексами в зависимости от вашего порядка

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector