3

我在初始化我的dynamic_bitset. 我有这个代码:

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

data1从文件中读取的 32 位二进制数在哪里。

当我输出 的值时data1[j],它会输出我需要分配给 x 的正确值,但是当我输出 x 时(在假定的初始化之后),x 都是 1。

我究竟做错了什么?

编辑:我正在尝试解压缩代码。压缩代码以 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 位二进制文​​件中的每一行并将该值分配给 data1,因此 data1 会随着循环的每次迭代而变化while
第一次迭代:

data1: 10001001110000001001011100110011  

第二次迭代:

data1: 00110011001110001010001110000000  

第三次迭代:

data1: 00000011100000000000000000000000 

ETC....

我想x成为一个包含所有这些值的长位集,这些值相互连接。

EDIT3:
尝试一种方法:

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

1 回答 1

1

有关如何填充dynamic_bitset.

首先,我会将您的循环更改为:

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

回复问题编辑:

您可以使用字符串构造一个 dynamic_bitset

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

所以只需读入整个字符串(只要它不是太大),扔掉任何空格,这样你就只需要一个长的 1 和 0 字符串(1001010101101101101110100010 ...),然后构造你的位集。

于 2011-11-22T04:49:13.507 回答