gpt4 book ai didi

c++ - 需要在二进制模式下使用 T=unsigned char 在流上使用 noskipws 吗?

转载 作者:行者123 更新时间:2023-11-30 04:08:29 25 4
gpt4 key购买 nike

我遇到了 Reading the binary file into the vector of unsigned chars并测试了问题中讨论的代码。

感兴趣的代码如下:

typedef unsigned char BYTE;

std::ifstream file(filename, std::ios::binary);
file.unsetf(std::ios::skipws);

std::vector<BYTE> vec;
vec.insert(vec.begin(),
std::istream_iterator<BYTE>(file),
std::istream_iterator<BYTE>());

根据 Benjamin Lindley 在 Why std::istream_iterator ignores newline characters? 的回答, istream::operator>>(char) 跳过空格。但是上面的类型是unsigned char,文件是用std::binary打开的。

为什么代码需要显式调用 file.unsetf(std::ios::skipws)(或者 file >> std::noskipws)

最佳答案

字符串>>的基本算法是:

1) skip whitespace
2) read and extract until next whitespace

如果您使用 noskipws,那么第一步将被跳过

第一次读取后,您位于空白处,因此下一次(以及所有后续)读取将立即停止,不会提取任何内容。

关于c++ - 需要在二进制模式下使用 T=unsigned char 在流上使用 noskipws 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21803615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com