2013-03-23 116 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(); 
相关问题