在C ++中读取二进制文件时缺少数据

时间:2014-02-20 08:15:00

标签: c++ fstream ifstream

vector<byte> h;
ifstream fin(file.c_str(), ios::binary);
if(!fin)
    return false;
byte b;
while(fin >> b)
    h.push_back(b);

h的长度为4021,而原始文件长度为4096字节。但是下面的代码给出了一个4096字节的字符串。为什么呢?

ostringstream sout;
sout << fin.rdbuf();
string s = sout.str();

更新

@ user2079303解决了我的问题,但任何其他方式来执行阅读任务。这很容易弄错。

1 个答案:

答案 0 :(得分:5)

当用char读取输入流char时(你的字节是字符,对吧?),标准流默认忽略空格。您可以使用std::noskipws来停止忽略它们。

fin >> std::noskipws >> b;

注意:ios::binary对此行为没有影响,即使有人可能会这样做。据我所知,它只会禁用翻译行结尾。

如果您不想担心处理问题,可以使用符合UnformattedInputFunction的功能。 cppreference有一个很好的例子,说明如何用istream::read读取二进制文件。