簡體   English   中英

在二進制模式下無法正確讀取文件 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

當您讀入10110100 a設置為-76

76是二進制的01001100 ,與您的輸出相匹配。

char更改為unsigned char應該可以解決您的問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM