我在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();
但它只读取188个字节的186个字节。
我已在hexeditor以及ls -al
中确认了文件大小。
答案 0 :(得分:11)
我不知道为什么,但默认情况下似乎跳过了空格。您需要使用noskipws
禁用该功能:
is >> std::noskipws;
答案 1 :(得分:9)
最后两个字节是什么?此外,您不需要istream_iterator
来读取这样的二进制数据。这太过分了,可能比使用streambuf
慢。
请参阅wilhelmtell's great answer中的此示例:
#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>());