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

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

本文关键字:一个 字节 读取 get 使用 一次      更新时间:2023-10-16

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

lololololololol

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

lololololololol
�

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

法典:

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

它正在读取EOF(文件末尾)字符。您需要在读取进行检查,以避免将其插入到向量中:

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

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

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

或者尝试更高级的方法。 operator>>std::getline也可以很好地用于此类输入。