Как boost :: dynamic_bitset хранит биты

Мне трудно понять, что 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 без перекомпиляции):

CMD

Мои вопросы:

  1. Что происходит в основном под капотом? Видимо это совсем не так
    сравнимо с массивом.
  2. Как я могу отправить такой битсет через сокет
    Отправить() ?

2

Решение

boost::dynamic_bitset<> внутренне хранит биты в целых числах без знака, которые хранятся в std::vector<>, Внутреннее хранилище не доступно, поэтому вы не можете получить к нему доступ напрямую.

Ты можешь использовать to_block_range скопировать boost::dynamic_bitset<> в массив целых чисел. И конструктор чтобы преобразовать этот массив целых чисел обратно в boost::dynamic_bitset<>,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]