В следующем коде У меня есть uint8_t
вектор заполняется из некоторых двоичного файла, который содержит информацию в some_size
количества байт -новообращенного вектора uint8_t к BITSET
std::ifstream db(path.c_str(), std::ios::binary);
std::vector <uint8_t> buffer(some_size, 0);
db.read(reinterpret_cast<char *>(&buffer.front()), some_size);
db.close();
Теперь я знаю, из какого-то индекса говорит 20, там существует 37 байт 1
или 0
, которые необходимо заполнить в bitset
. Битовый набор выглядит как std::bitset<37> booleans;
и инициализируется для всех 0
s изначально. Теперь, если начальный индекс равен 20, поэтому мне нужно заполнить booleans
37 булевыми значениями, которые присутствуют в байтах, которые будут находиться в диапазоне от buffer[20]
до buffer[56]
.
Помимо перекоса над вектором и вручную установки 1 или 0 на каждом бите в битрейте, есть ли другой способ преобразования этих байтов в этот битрейт?
Я не вижу, как вы собираетесь конвертировать 'uint8_t' в тип' bitset', используя без написания цикла или с помощью функции, которая внутренне выполняет цикл для вас. В любом случае, цикл выполняется. – PaulMcKenzie
@PaulMcKenzie of the course требуется цикл. Но ручная петля против использования чего-то типа 'std :: copy' или' std :: copy_n' - вот что я прошу здесь. –
Проблема заключается в том, что у 'битета' нет итераторов, поэтому функции алгоритма, такие как' copy' или 'copy_n', будут с трудом делать то, что вы хотите. Вероятно, 'for_each' - лучшее, что вы можете сделать, [что-то вроде этого] (http://ideone.com/KyPbvU). – PaulMcKenzie