我正在尝试将文本文件转换为二进制文件,然后读入该二进制文件并将其转换回文本。这是我为它写的代码,但是中间文件,即二进制文件"ex7_out1"
,也是文本,我期待文本的二进制编码形式,这是怎么发生的?
#include "std_lib_facilities.h"
int main()
{
//to binary from text
ifstream ifs{"ex7_in", ios_base::binary};
ofstream ofs{"ex7_out1", ios_base::binary};
char ch;
while(ifs.get(ch)) { ofs.write(as_bytes(ch),sizeof(char)); }
ifs.close();
ofs.close();
//from binary to text
ifstream ifs1{"ex7_out1", ios_base::binary};
ofstream ofs1{"ex7_out2"};
char ch1;
while(ifs1.read(as_bytes(ch1), sizeof(char))) { ofs1 << ch1; }
}
输入文件"ex7_in"
包含一行文本。
这是Bjarne Stroustrup的书“Programming:Principles and Practice Using C ++”的练习。
答案 0 :(得分:1)
可以使用std::bitset
完成此操作。
文本:
ABCD
二进制代表文本:
0010000
0010001
0010010
0010011
从文字到二进制:
for(auto it = std::istream_iterator<char>(ifs1); it != std::istream_iterator<char>(); ++it)
ofs1 << std::bitset<CHAR_BIT>(*it) << std::endl; // CHAR_BIT is defined in <climits>
从二进制到文字:
for(auto it = std::istream_iterator<std::string>(ifs); it != std::istream_iterator<std::string>(); ++it)
ofs << static_cast<char>(std::bitset<CHAR_BIT>(*it).to_ulong());
这适用于文本模式流。你想读它。我们不读二进制文件,除非我们使用HEX编辑器为我们阅读,这与我上面做的一样。