У меня огромный набор битов, представляющий все биты файла размером 74 МБ.Я использую алгоритм сжатия для создания сжатого строкового представления этого набора битов.Затем мне нужно сохранить эту строку в другой динамический набор битов, чтобы впоследствии ее можно было распаковать.Моя проблема в том, что независимо от того, как я пытаюсь заполнить набор битов из строки, он всегда заполняется в обратном порядке.
Для простоты, скажем, моя сжатая строка имеет вид
1110001101010111011101
Здесьэто моя первая попытка заполнения моего выходного динамического набора битов:
string compressed = 1110001101010111011101;
output = boost::dynamic_bitset<unsigned char> (compressed);
Когда я это делаю, мой набор битов превращается в обратную строку:
1011101110101011000111
Итак, я попробовал это:
output = boost::dynamic_bitset<unsigned char> (compressed.begin(), compressed.end());
И я получаю точно такой же вывод.Затем я попытался использовать обратные итераторы, и я понятия не имею, как это возможно, но он заполняет набор битов точно таким же образом:
output = boost::dynamic_bitset<unsigned char> (compressed.rbegin(), compressed.rend());
Единственный способ получить мой набор битов в правильном порядке - этосделать это:
for(uint i = 0; i < compressed.size(); i++)
{
if(compressed[i] == '0')
output.push_back(false);
else output.push_back(true);
}
Это заполняет мой выходной набор битов в правильном порядке, однако это значительно медленнее, чем при использовании другого метода (на 30 секунд медленнее с используемой строкой).Я также могу использовать std :: reverse, чтобы перевернуть строку на месте, а затем заполнить набор битов, но это занимает МНОГО дополнительного времени.Есть ли способ эффективно заполнить динамический набор битов значениями из строки в обычном порядке?Я понимаю, почему он заполнен в обратном порядке, но я не использую свой набор битов для представления целого числа, я использую его для хранения данных из файла, поэтому мне нужно, чтобы он был в порядке.Однако не имеет смысла, почему использование обратных итераторов приведет к тому же результату.
РЕДАКТИРОВАТЬ Я сделал снимок экрана со своим выводом и соответствующей частью моего кода.Сжатый вывод показывает первые 6000 символов сжатой версии моего набора битов, сохраненной в виде строки.Эта строка сама по себе не имеет проблем.Подчеркнута красным линия, которую я использую для хранения этой строки в выходных данных boost :: dynamic_bitset.Затем я печатаю первые 6000 символов выходного набора битов, и они совершенно разные.Следует отметить, что битовый набор «output» передается в эту функцию в качестве ссылочного параметра, но изначально он пуст.![Output](https://i.stack.imgur.com/RPHMl.png)