2016-09-06 7 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<>을 정수 배열로 복사 할 수 있습니다. 그리고 constructor은 정수 배열을 boost::dynamic_bitset<>으로 다시 변환합니다.

+0

약간의 시간이 지났지 만 답변에 감사드립니다. 그러나 복사 작업을 피하기 위해 모든 방식을 재고하고 char 배열의 C 스타일 비트 연산으로 되돌아갔습니다. –