2016-09-06 77 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_rangeboost::dynamic_bitset<>複製到整數數組中。和constructor將該整數數組轉換回boost::dynamic_bitset<>

+0

不少時間過去了,但謝謝你的回答。不過,我想避免複製操作,所以我重新考慮了我的整個方法,並返回到char數組上的C樣式位操作。 –