在二进制模式下 C++ 无法正确读取文件

File not read correctly in binary mode C++

我有一个包含以下数据的二进制文件,

10110100
11111001
01110001

我用这段代码来阅读它,

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string in;
    cin>>in;
    ifstream input(in.c_str(),ios::in | ios::binary);
    if(!input.is_open())
    {
        cout<<"oops!!"<<endl;
        return 0;
    }
    cout<<"OK!!"<<endl;
    char a;
    while(input.get(a))
    {
        string s="";
        int b=a,c=0;
        while(b!=0)
        {
            c++;
            s+=(b%2?'1':'0');
            b/=2;
        }
        s+=string(8-c,'0');
        for(int i=s.length()-1;i>=0;i--)
            cout<<s[i];
        cout<<endl;
    }
    cout<<endl<<"DONE!!"<<endl;
}

基本上使用 get() 函数从文件中读取一个字符,1 个字节,并将其输出为二进制表示形式。 我也试过 read() 但它似乎没有用。 如果有帮助,我会得到以下输出,

01001100
00000111
01110001

文件中没有其他数据,我用二进制编辑器检查过。 我有什么问题?

10110100 是 180.

在大多数平台上,char 是一个带符号的 8 位数字,范围为 -128127

当您读入 10110100a 设置为 -76

76 是二进制的 01001100,与您的输出匹配。

char 更改为 unsigned char 应该可以解决您的问题:

unsigned char a;
while(input.read(reinterpret_cast<char*>(&a), 1))