编辑:我正在尝试将文本文件转换为字节。我不确定代码是否将其转换为字节。这是 header 的链接,因此您可以看到 as_bytes 函数。
#include "std_lib_facilities.h"
int main()
{
cout << "Enter input file name.\n";
string file;
cin >> file;
ifstream in(file.c_str(), ios::binary);
int i;
vector<int> bin;
while(in.read(as_bytes(i), sizeof(int)))
bin.push_back(i);
ofstream out(file.c_str(), ios::out);
for(int i = 0; i < bin.size(); ++i)
out << bin[i];
keep_window_open();
}
请注意,现在输出流只输出 vector 的内容。它不使用写函数或二进制模式。这会将文件转换为一大行数字 - 这就是我要查找的内容吗?
这里是第二个代码的文件转换的例子:
that guy likes to eat lots of pie (not sure if this was exact text)
转向
543518319544825700191924850016351970295432362115448292821701667182186922608417526375411952522351186935715718643976841768956006
最佳答案
第一种方法没有更改文件的原因是所有文件都以相同的方式存储。文本文件和二进制文件之间唯一的“区别”是文本文件只包含可以显示为 ASCII 字符的字节,而二进制文件* 具有更随机的字节种类和顺序。所以你正在以字节的形式读取字节,然后再次以字节的形式输出它们!
*我将 Unicode 文本文件包括为二进制文件,因为它们可以有多个字节来表示一个字符点,具体取决于字符点和使用的编码。
第二种方法也很简单。您像以前一样读取字节,并将它们存储为整数(可能有 4 个字节长)。然后你只是打印出整数,就好像它们是整数一样,所以你看到的是一串数字。
至于为什么你的第一个方法会截断一些字节,你是对的,因为它可能是你代码中的一些错误。我认为更重要的是解释这种情况下的想法,而不是调试一些测试代码。
关于c++ - 二进制文件 I/O 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197858/