C++ 是否需要在二进制模式下使用T=无符号字符的流上使用noskipws?
我偶然发现并测试了问题中讨论的代码 兴趣代码如下:C++ 是否需要在二进制模式下使用T=无符号字符的流上使用noskipws?,c++,file-io,stream,binaryfiles,C++,File Io,Stream,Binaryfiles,我偶然发现并测试了问题中讨论的代码 兴趣代码如下: 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),
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>());
typedef无符号字符字节;
std::ifstream文件(文件名,std::ios::binary);
unset文件(std::ios::skipws);
std::vec;
向量插入(向量开始(),
std::istream_迭代器(文件),
std::istreamu迭代器();
根据Benjamin Lindley在上的回答,istream::operator>>(char)
跳过空格。但是上面的类型是unsigned char
,文件是用std::binary
打开的
为什么代码需要显式调用
file.unset(std::ios::skipws)
(或者,file>>std::noskipws)
?字符串>>的基本算法是:
1) 跳过空白2) 读取并提取到下一个空格 如果使用
noskipws
,则跳过第一步
第一次读取后,您将被定位在空白处,因此下一次(以及所有后续)读取将立即停止,不提取任何内容。ios::binary
只是使其不转换换行符。还请注意,char
可能与无符号char
的类型相同。std::ios_base::binary
openmode不会禁用操作符>()
的“格式化”功能。它只抑制特定于系统的转换。0x499602D2和user3286380-因此流上的std::binary
仍然有行的概念(如getline
和readline
)?如果你想做我认为你是的事情,你可能想代替std::istream\u迭代器。在这样做的过程中,您的性能可能会更好。这可能会有所帮助,谢谢。没有字符串(或其原语字符
)。也许我在这个练习中使用了错误的类。