C ++,将包含二进制文件的String存储到文本文件中

时间:2013-03-23 14:17:28

标签: c++ binaryfiles fstream ofstream huffman-code

我目前正在尝试存储包含二进制代码的字符串。

当我尝试将此字符串写入文本文件时,它只是以字符串格式存储每个0和1字符,而不是根据需要将其存储为8位块。这会导致文件比预期的大,考虑到它使用8位来存储每个0和1.

我应该将字符串写入.bin文件而不是.txt文件吗? 如果是这样,我将如何进行此操作,如果可能的话,还有一些工作代码的示例。

我对你提前提出的建议表示感谢。

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

澄清: 我有一个由1和0组成的字符串(由霍夫曼树组成),我希望将这个字符串分成8位块,我希望将所述chink表示的每个字符写入压缩文件。

3 个答案:

答案 0 :(得分:1)

我只是猜测,因为你没有显示任何代码,但似乎你有一个包含字符 '1''0'的字符串。如果你把它写到文件当然它将作为文本。您需要先将其转换为整数。

参见例如std::stoistd::strtol用于将任意基数字符串转换为整数的函数。

答案 1 :(得分:1)

std::bitset可以将字符串转换为整数。

std::bitset<8> bits("01010101");
cout << bits.to_ullong();

答案 2 :(得分:0)

  

我应该将字符串写入.bin文件而不是.txt文件吗?

如果你愿意......但这也不会有什么不同。 ofstream不关心文件名。只需将字符串转换为字节(uint8_t)并将该字节写入文件:

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