C++读取二进制文件并在屏幕上输出十六进制,出现乱码。分不多,全给了,帮帮小弟啊!
ifstreamfile("sever",ios::in|ios::binary);if(!file.is_open){cout<<"ERROROPEN"<<endl;}...
ifstream file("sever",ios::in| ios:: binary);
if(!file.is_open)
{
cout << "ERROR OPEN" << endl;
}
file.seekg(0,ios::end);
int length = file.tellg();
file.seekg(0,ios::beg);
char* buf = new char[length];
file.read(buf,length);
file.close();
cout << hex << buf << endl;
system("pause");
}
为什么会出现乱码,而且文件读不全,只打印一点点? 展开
if(!file.is_open)
{
cout << "ERROR OPEN" << endl;
}
file.seekg(0,ios::end);
int length = file.tellg();
file.seekg(0,ios::beg);
char* buf = new char[length];
file.read(buf,length);
file.close();
cout << hex << buf << endl;
system("pause");
}
为什么会出现乱码,而且文件读不全,只打印一点点? 展开
2个回答
展开全部
1、二进制文件是如何得到的?是用outstream.write()语句写成的吗?
2、不要用cout << hex << buf 输出,应该用 cout << hex << (int)buf[i]。
3、应该用循环语句控制buf的内容。
ifstream file("sever",ios::in| ios:: binary);
if(!file.is_open) cout << "ERROR OPEN" << endl;
file.seekg(0,ios::end);
int length = file.tellg();
file.seekg(0,ios::beg);
char* buf = new char[length + 1];
file.read(buf,length);
file.close();
for(int i = 0; i < length; ++i)
cout << hex << (int)buf[i];
cout << endl;
system("pause");
}
展开全部
我看一下,有嘛问题
更多追问追答
追答
#include "stdafx.h"
#include "iostream"
#include <fstream>
#include "iomanip"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout << "START!" << endl;
ifstream file;
file.open("d:\\sdoa66.zip.tdlex",ios::in| ios:: binary);
if(!file.is_open())
{
cout << "ERROR OPEN" << endl;
}
file.seekg(0,ios::end);
int length = file.tellg();
file.seekg(0,ios::beg);
char* buf = new char[length];
file.read(buf,length);
file.close();
for(int i(0);i<length;i++)
cout <<setiosflags(ios::uppercase)<<setw(2)<<setfill('0')<<hex<< (int)buf[i]<<" ";
cout<<endl;
system("pause");
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询