2012-03-16 43 views
1

我有一個8位的位集。將8位的位集寫入文件(C++)

我該如何將這8位轉換爲一個字節然後寫入文件?

我已到處尋找,只有找到轉換的另一種方式。

非常感謝!

+3

什麼是'BitSet'?它在哪裏定義? – 2012-03-16 11:27:55

+4

將您的'BitSet'轉換爲'FlooBlar',並調用'FileGizmo'對象上的'jifiddle()'成員函數。 – 2012-03-16 11:29:44

+0

你指的是這個嗎? http://www.cplusplus.com/reference/stl/bitset/ – 2012-03-16 11:33:33

回答

2

http://www.cplusplus.com/reference/stl/bitset/

它們也可以直接插入和從二進制格式的流中提取。

您不需要轉換任何東西,只需將它們寫入輸出流即可。

除此之外,如果您真的想將它們解壓縮到您熟悉的位置,請提供to_ulongto_string方法。

如果你在set中的位數多於unsigned long可以容納的位數,並且不想將它們直接寫出到流中,那麼你要麼轉換爲字符串並轉到該路徑,要麼使用[]運算符訪問每一位,並將它們轉換爲要寫出的字節。

+2

如你所說,如果我「將它們寫入輸出流」,輸出流將包含一系列'0'和'1'字符。當文檔說「以二進制格式從流中插入和提取」時,我預計8位組將被寫爲字節。例如[code] bitset <8> F(「01000110」); ofstream fs(「test.txt」); fs << F; [/ code]會導致test.txt包含字母'F',而不是字符串「01000110」。 – Ants 2012-06-01 17:27:08

3

假設您正在討論C++ STL位集,答案是將bitset轉換爲int(ulong爲準確),並將結果轉換爲char。

例子:

#include <bitset> 
#include <iostream> 
using namespace std; 
main() 
{ 
    bitset<8> x; 
    char byte; 

    cout << "Enter a 8-bit bitset in binary: " << flush; 
    cin >> x; 
    cout << "x =  " << x << endl; 
    byte = (char) x.to_ulong(); 
    cout << "As byte: " << (int) byte << endl; 
}