C++ 当尝试读取9到13之间的无符号字符时,ifstream的行为非常奇怪

C++ 当尝试读取9到13之间的无符号字符时,ifstream的行为非常奇怪,c++,ubuntu,C++,Ubuntu,我一直在拼命想弄明白这一点。我没有在网上找到任何东西,所以我在这里分享,以防有人能启发我 #include <iostream> #include <fstream> int main(){ std::ifstream in("bf", std::ios::binary); if (!in) return false; unsigned char byte; while (!in.eof()){

我一直在拼命想弄明白这一点。我没有在网上找到任何东西,所以我在这里分享,以防有人能启发我

#include <iostream>
#include <fstream>

int main(){
    std::ifstream in("bf", std::ios::binary);
    if (!in)
        return false;

    unsigned char byte;    
    while (!in.eof()){
        in >> byte;
        if (in.fail()){
            break;
        }
        std::cout<<(int)byte<<std::endl; 
    }
}
生成此输出:

0
1
2
3
4
5
6
7
8
14
15
16
17
18
19

我正在运行Ubuntu 18.04。有人能复制这种行为吗?有人知道发生了什么吗?

Python脚本正在创建一个二进制文件,其内容为字节0..19。然后,C++代码以二进制方式读取该文件并输出其读取的字节的数值。问题是它没有读到你所期待的

<>你的C++代码有两个问题:

操作员>>执行格式化读取,这不是您在这种情况下想要的。运算符>>忽略空白,字节9..13表示空白字符,这就是为什么您看不到它们被输出的原因。您需要一个无格式的读取,例如通过steam的方法

试试这个:

包括 包括 int main{ std::ifstream inbf,std::ios::binary; 如果 返回false; 字符字节; 在.getbyte中时{ 标准::cout
0
1
2
3
4
5
6
7
8
14
15
16
17
18
19