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

标签 c++ file vector while-loop istream

<分区>

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

lololololololol

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

lololololololol
�

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

代码:

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

最佳答案

它正在读取 EOF ( end of file ) 字符。您需要在阅读后 进行检查,以避免将其插入到 vector 中:

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 approaches . operator>>std::getline 也适用于这种输入。

关于c++ - 使用 .get() 一次读取一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35386333/

相关文章:

c++ - 是否有任何 C++ 工具可以检测 static_cast、dynamic_cast 和 reinterpret_cast 的滥用?

c++ - 方法延迟整个程序的时间延迟

c++ - XCode 助理编辑器不显示我的 .h 和相关的 .cpp 文件

尝试从 std::map 对象访问 key 时,c++ 应用程序崩溃

java - 文件对象中的默认存储位置是什么

php, 文件下载

java - 文件未在 Java 中使用 JFileChooser 保存

c++ - 遍历 vector (段错误)

c++ - 将对象 vector 传递到新的对话窗口 (Qt C++)

c++ - 在不破坏保留元素的情况下更改 vector 的大小