[英]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 位數字,范圍為-128
到127
。
當您讀入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.