我有以下代码,我一直在188字节文件上使用:
std::ifstream is("filename", std::ios::binary);
std::vector<uint8_t> buffer;
std::istream_iterator<uint8_t> i_input(is);
std::copy(i_input, std::istream_iterator<uint8_t>(),
std::back_inserter(buffer));
std::cout << buffer.size();
Run Code Online (Sandbox Code Playgroud)
但是它只读取188个字节的186个字节.
我已经使用hexeditor确认了文件大小ls -al.
Tim*_*imo 11
我不知道为什么,但默认情况下似乎跳过空白.你需要禁用它noskipws:
is >> std::noskipws;
Run Code Online (Sandbox Code Playgroud)
最后两个字节是什么?此外,您并不需要istream_iterator像这样读取二进制数据.这太过分了,可能比使用慢streambuf.
从wilhelmtell的伟大答案中看到这个例子:
#include<iterator>
// ...
std::ifstream testFile("testfile", std::ios::in | std::ios::binary);
std::vector<char> fileContents((std::istreambuf_iterator<char>(testFile)),
std::istreambuf_iterator<char>());
Run Code Online (Sandbox Code Playgroud)