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解决了我的问题,但任何其他方式来执行阅读任务。这很容易弄错。
答案 0 :(得分:5)
当用char读取输入流char时(你的字节是字符,对吧?),标准流默认忽略空格。您可以使用std::noskipws来停止忽略它们。
fin >> std::noskipws >> b;
注意:ios::binary
对此行为没有影响,即使有人可能会这样做。据我所知,它只会禁用翻译行结尾。
如果您不想担心处理问题,可以使用符合UnformattedInputFunction的功能。 cppreference有一个很好的例子,说明如何用istream::read读取二进制文件。