C++ cin>>byte 奇怪的行为

c++ cin>>byte strange behavior

本文关键字:gt byte cin C++      更新时间:2023-10-16

我有以下代码

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

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

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