使用 .get() 一次读取一个字节

Reading in one byte at a time with .get()

所以我正在读取包含以下内容的输入文件:

lololololololol

我需要使用二进制一次一个字节地读取它,以用于我稍后要做的事情。为此,我使用 get() 读取它,然后将其存储到一个字符中。除了读入的最后一个字符外,它似乎工作正常。它读入的向量包含:

lololololololol
�

我不太确定最后一个值是什么,但它完全抛弃了我的最终输出。所以我的问题是,get() 是否有理由从我的文本文档中读取不存在的值或字节?还是在读一些我不知道的东西?

代码:

while(istr.good()) {
    temp = istr.get();
    input.push_back(temp);
}

正在读取 EOF (end of file) 字符。您需要在 读取它之后进行检查 以避免它被插入到向量中:

while(temp = istr.get(), istr.good()) // comma operator
    input.push_back(temp);

或者您可以使用第二个 std::istream_base::get overload 并让 istr 隐式转换为 bool:

while(istr.get(temp))
    input.push_back(temp);

或尝试more advanced approachesoperator>>std::getline 也适用于这种输入。