C ++: dynamic_bitset - PullRequest
       39

C ++: dynamic_bitset

3 голосов
/ 22 ноября 2011

У меня проблемы с инициализацией моего dynamic_bitset. У меня есть этот код:

for(int j=(data1.length()-1); j>=0; j--){  
    x[j] = data1[j];  
}

Где data1 - 32-разрядное двоичное число, считываемое из файла.

Когда я вывожу значения для data1[j], он выводит правильные значения, которые мне нужно присвоить x, но когда я вывожу x (после предполагаемой инициализации), x - это все единицы.

Что я делаю не так?

РЕДАКТИРОВАТЬ: я пытаюсь распаковать код. Сжатый код дается в строках длиной 32 бита. Я хочу поместить все в одну структуру для легкого доступа.

Мой код для инициализации x:

int size = numLines * 32; //numLines is the number of lines of 32 bits
boost::dynamic_bitset<> x(size);  

EDIT2:
Есть 8 строк по 32 бита каждая. Цикл for вложен в цикл while, который обращается к каждой из этих 8 строк 32-разрядного двоичного файла и присваивает это значение данным1, поэтому данные1 меняются при каждой итерации цикла while.
Первая итерация:

data1: 10001001110000001001011100110011  

Вторая итерация:

data1: 00110011001110001010001110000000  

Третья итерация:

data1: 00000011100000000000000000000000 

и т.д ....

Я хочу, чтобы x был длинным набором битов, содержащим все эти значения, соединенные друг с другом.

EDIT3:
Попытка одного метода:

for(int i=0; i<numLines; i++){
    d.append(data1);
}
boost::dynamic_bitset<> x(std::string(d));

1 Ответ

1 голос
/ 22 ноября 2011

См. Этот пример boost , чтобы узнать, как заполнить dynamic_bitset.

.

Во-первых, я бы изменил ваш цикл на:

for (unsigned i = 0; i < data1.length(); i++) {
    x[i] = data1[i];
}

Ответ на вопрос Редактировать:

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

boost::dynamic_bitset<> x(std::string(data1));

Так что просто прочитайте всю строку (при условии, что она не слишком большая), отбросьте все пробелы, чтобы у вас была просто одна длинная строка из 1 и 0 (1001010101101101101110100010 ...), а затем создайте свой набор битов .

...