2016-09-06 6 views
2

boost ::: dynamic_bitset、またはstd :: vectorが内部的に何をするのか苦労しています。私は最終的にやりたいことは、ネットワークのフレームを構成し、ソケットを介して、それを送って、私はちょうど私が組み立てたビット順を保つ方法でそれらを変換することはできませんが...boost :: dynamic_bitsetはどのようにビットを格納するのですか

#include <iostream> 
#include<stdio.h> 
#include "boost/dynamic_bitset.hpp" 


int main() 
{ 
    boost::dynamic_bitset<> b(8, 10);   // 8 Bits, value 10 

    std::cout << "b  = " << b << std::endl; // as expected 

    printf("Vector size: %i\n", b.size()); 
    printf("Bits: %d", b);      // ? 
    return 0; 
} 

私はクラスが過負荷にすることを理解します< <ストリーム演算子なので、正しい出力が得られますが、printfは生の構造を示すようです。いなくても、確定私に表示されます(繰り返しの下に再コンパイルせずに同じ.exeファイルを実行):

cmd

私の質問:

  1. ボンネットの下に基本的にはどうなりますか?どうやら、配列に匹敵するのは全く ではありません。
  2. ソケット経由でこのようなビットセットを送信するにはどうすればいいですか send()?
+1

'int'型ではないオブジェクトを' printf'の '%d'指定子に渡すことは、未定義の動作です。 – aschepler

答えて

0

boost::dynamic_bitset<>は、ビットを符号なし整数で内部的に格納し、std::vector<>に格納されます。内部ストレージは公開されていないため、直接アクセスすることはできません。

to_block_rangeを使用すると、boost::dynamic_bitset<>を整数の配列にコピーできます。その整数の配列をboost::dynamic_bitset<>に変換するためのconstructor

+0

かなりの時間が経過しましたが、答えに感謝します。しかし、私はコピー操作を避けたいので、私は全体のアプローチを再考し、char配列のCスタイルのビット操作に戻りました。 –

関連する問題