2011-02-02 60 views
2

我有一個矢量< bool>二進制數據,我需要寫入一個二進制文件一點一點地(我知道它必須是字節的倍數爲8,只是假設它是) 。然後我需要將這些數據重新讀入矢量< bool>中。我很難讓這個工作。從文件中收集位數據

數據必須在矢量< bool>中開始和結束。如果任何人都可以建議簡單的語法來實現這一點,這將是一個巨大的幫助。

+1

但是你這個昨天已經要求在http://stackoverflow.com/questions/4861898/outputting-bit-data-對二進制文件-C。 – TonyK 2011-02-02 14:38:28

+0

是的,我基本上想要複製整個矢量< bool>數據到一個文件,然後重新收集它(它包含一個huffman編碼數據)。我設法讓昨天的小代碼遵循以下http://courses.cs.vt.edu/~cs2604/fall02/binio.html中給出的關於「閱讀和寫作複雜數據」的內容。在主程序中不起作用,給我錯誤。你可以看到我的其他職位。 – 2011-02-02 14:50:37

回答

1

最簡單的方法是使用std::bitset。它有一個可用於完成轉換的構造函數和to_ulong成員。然後你只需要將一個大小爲8的矢量轉換爲bitset,反之亦然。當心位存儲在您的載體,如果它適用於您的文件中的字節序的順序...

我在好日子來的,這裏是一些「僞」代碼:

// you will guess declarations 
// you might have to reverse bit order dependaing of how you store bits 

for(int i = 0; i < 8; ++i) 
{ 
    if(myvector[i]) mybistset.set(i); 
} 

char toWriteInFile = bitset.to_ulong(); 

// write in file 

[...] 

char readFromFile; 

// read from file 

std::bitset mybitset(readFromFile); 

// same remarks 

for(int i = 0; i < 8; ++i) 
{ 
    myvector[i] = mybistset[i]; 
} 

當然,你必須管理的矢量大小比8的部分更大;)

MY2C