需要与T =以二进制方式无符号字符的数据流noskipws?(Need for noskipws o

2019-10-19 08:35发布

我碰到读二进制文件到无符号字符的载体和测试问题讨论的代码。

感兴趣的代码如下:

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>());

据本杰明·林德利的在回答为什么的std :: istream_iterator忽略换行符? , istream::operator>>(char)跳过空格。 但上述类型是unsigned char ,该文件与打开std::binary

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

Answer 1:

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

1)跳过空白
2)读取并提取直到下一个空白

如果你使用noskipws ,那么first step is skipped

第一次读取后,将positionned一个空白,所以下(和所有以下)读取将立刻停止,提取什么。



文章来源: Need for noskipws on stream with T=unsigned char in binary mode?