c ++ cin>>字节奇怪的行为

时间:2014-04-29 16:40:23

标签: 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;

我用二进制文件

调用该程序
./program <<binary_file

其中包括:(从十六进制编辑器查看)

0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f

但是我得到以下输出:

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

1 个答案:

答案 0 :(得分:3)

字符0x09到0x0D是空格,因此operator>>在提取值时会忽略它们。如果您希望读取未格式化的字符,请使用其中一个std::cin.get()重载(如果您在Windows上进行编程,则回车符(0x0D)仍将作为行结束的一部分被忽略,除非您以二进制文件重新打开标准输入流模式)。

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