2

boost:::dynamic_bitset または std::vector が内部で何をしているのか理解するのに苦労しています。私が最終的にやりたいことは、ネットワークフレームを作成してソケット経由で送信することですが、組み立てたビット順序を維持する方法でそれらを変換することはできません...

#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を繰り返し実行しました):

コマンド

私の質問:

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

1 に答える 1

0

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

を使用して、aを整数の配列にto_block_rangeコピーできます。boost::dynamic_bitset<>そして、その整数の配列をboost::dynamic_bitset<>.

于 2016-09-06T17:33:58.660 に答える