使用 .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 approaches。 operator>>
和 std::getline
也适用于这种输入。
所以我正在读取包含以下内容的输入文件:
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 approaches。 operator>>
和 std::getline
也适用于这种输入。