3

の初期化に問題がありますdynamic_bitset。私はこのコードを持っています:

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

data1ファイルから読み込まれる32ビットの2進数はどこにありますか。

の値を出力するとdata1[j]、xに割り当てる必要のある正しい値が出力されますが、xを出力すると(想定される初期化後)、xはすべて1になります。

私は何が間違っているのですか?

編集:私はコードを解凍しようとしています。圧縮されたコードは、32ビット長の行で示されます。簡単にアクセスできるように、すべてを1つの構造にまとめたいと思います。

xを初期化する私のコード:

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

EDIT2:
それぞれ32ビットの8行があります。ループは、32ビットバイナリの8行のそれぞれにアクセスし、その値をdata1に割り当てるループfor内にネストされているため、data1はループの反復ごとに変化します。 最初の反復:whilewhile

data1: 10001001110000001001011100110011  

2回目の反復:

data1: 00110011001110001010001110000000  

3回目の反復:

data1: 00000011100000000000000000000000 

等....

x互いに連結されたすべての値を含む長いビットセット になりたいです。

EDIT3:
1つの方法を試してみてください:

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 ...)を1つ作成し、ビットセットを作成します。

于 2011-11-22T04:49:13.507 に答える