C++ c++;cin>&燃气轮机;字节奇怪的行为

C++ c++;cin>&燃气轮机;字节奇怪的行为,c++,binary,cin,C++,Binary,Cin,我有以下代码 unsigned char input; vector <unsigned char> buffer; while (cin >>input){ buffer.push_back(input); } for (int i=0;i<buffer.size();i++) cout<<std::hex<<(int)buffer.at(i)<<endl; 但是,我得到以下输出: 0 1 2 3 4 5 6

我有以下代码

unsigned char input;
vector <unsigned char> buffer;
while (cin >>input){
    buffer.push_back(input);
}

for (int i=0;i<buffer.size();i++)
    cout<<std::hex<<(int)buffer.at(i)<<endl;
但是,我得到以下输出:

0
1
2
3
4
5
6
7
8
e
f
10
11
12
13
14
15
16
17
18
19
1a
1b
1c
1d
1e
1f
如你所见,“9”、“a”、“b”、“c”、“d”都不见了。你能解释一下怎么了吗?我是不是错过了一些重要的东西?谢谢

或者,您可以建议其他方法如何从cin加载二进制文件并将其存储在

vector<unsigned char> buffer
向量缓冲区

字符0x09到0x0D是空白,因此在提取值时,
操作符>
会忽略这些字符。如果要读取未格式化字符,请使用
std::cin.get()
重载之一(如果在windows上编程,除非以二进制模式重新打开标准输入流,否则回车符(0x0D)仍将作为行尾的一部分被忽略)


您还可以使用
std::noskipws
操纵器禁用格式化输入函数的前导空格跳过。

您能否提供一些代码,说明如何从cin获取()此字节?除了字符(a,b,c,d,e,f,g,h,I,…)之外,我还在努力获取其他东西。没有标准的方法将
std::cin
转换为二进制模式。(而且,至少直到最近,0x1A在Windows下会被视为文本模式下的文件结尾。)@JamesKanze是的,但我再次认为Windows是唯一一个区分文本/二进制的平台,而且
\u setmode
显然有效(不像你说的那样可移植)。我更新了这个问题,你能看看吗?所以唯一的问题是,它不能在windows上使用?@user1762087:你可以在评论中要求澄清,或者发表一篇新文章。请不要改变现有帖子的要求。
0
1
2
3
4
5
6
7
8
e
f
10
11
12
13
14
15
16
17
18
19
1a
1b
1c
1d
1e
1f
vector<unsigned char> buffer