Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否需要在二进制模式下使用T=无符号字符的流上使用noskipws?_C++_File Io_Stream_Binaryfiles - Fatal编程技术网

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迭代器。在这样做的过程中,您的性能可能会更好。这可能会有所帮助,谢谢。没有
字符串(或其原语
字符
)。也许我在这个练习中使用了错误的类。