2013-03-23 34 views
2

我正在嘗試存儲包含二進制代碼的字符串。C++,將包含二進制文件的字符串存儲到文本文件中

當我試圖將這個字符串寫入一個文本文件時,它只是將字符串格式的每個0和1個字符存儲起來,而不是根據需要將其存儲到8位塊中。這會導致文件比預期的大,因爲它使用8位來存儲每個0和1.

我應該將字符串寫入.bin文件而不是.txt文件嗎? 如果是這樣,我將如何去做這件事,如果可能的話,一個例子與一些工作代碼。

我在此先感謝您的任何建議。

string encoded = "01010101";  
    ofstream myfile; 
    myfile.open ("encoded"); 
    myfile << encoded; 
    myfile.close(); 

澄清: 我有1的和0的(從霍夫曼樹生成的)的由一個串,我想了打破這個字符串轉換成8位的塊,我希望寫由所述縫隙所表示的每個字符到一個壓縮文件。

+0

你有一個很好的理由在字符串存儲二進制數據?不能使用存儲二進制數據的東西? – Pubby 2013-03-23 14:22:47

+0

我試圖通過使用霍夫曼樹來存儲編碼文本產生的二進制文件。我遇到的問題是以8位壓縮方式將二進制文件寫入文件。 – user2202417 2013-03-23 15:00:20

回答

0

我應該將字符串寫入.bin文件而不是.txt文件嗎?

如果你願意的話......但這也不會有什麼不同。 ofstream不關心文件名。只需將字符串轉換爲字節(uint8_t)和字節寫入文件:

string s = "10101010"; 
uint8_t byte = strtoul(s.c_str(), NULL, 2); 
myfile << byte; 
+0

像這樣? 'string test =「01010101」; uint8_t byte = strtoul(test.c_str()); ofstream myfile3; ; myfile3.open(「binary.txt」); myfile3 << test; myfile3.close();'@ H2CO3 – user2202417 2013-03-23 14:46:03

+0

@ user2202417是的,除了我不小心忽略了兩個'strtoul'的參數。請參閱編輯。 – 2013-03-23 16:40:03

1

我只是猜測,因爲你不顯示任何代碼,但似乎你有一個包含字符'1''0'的字符串。如果你把它寫到一個文件當然會作爲一個文本。您需要先將其轉換爲整數。

參見例如std::stoistd::strtol用於將任意鹼基的字符串轉換爲整數的函數。

1

std::bitset可以將字符串轉換爲整數。

std::bitset<8> bits("01010101"); 
cout << bits.to_ullong(); 
相關問題