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");
}
为什么会出现乱码,而且文件读不全,只打印一点点?
展开
 我来答
xoaxa
2014-09-28 · TA获得超过8609个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3461万
展开全部

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");
}
更多追问追答
追问

这个文件是现成的,我也不知道是用什么写成的,按照您的方法确实有效果,但为什么有那么多f额。。

追答
不知道数据出处和用途,可以当作垃圾处理了。
tianlidon
2014-09-28 · TA获得超过1219个赞
知道小有建树答主
回答量:676
采纳率:85%
帮助的人:106万
展开全部
我看一下,有嘛问题
更多追问追答
追问

追答
#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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式