#include<iostream>
#include<iomanip>
voidprintHex(std::ifstream&ifs,std::ostream&ostream);
voidshowInfo();
/**
*命令形式如:ShowHex[filename][destfilename]
*表示将filename的内容以16进制形式输出到destfilename
*
*如果参数个数等于1,则打印出帮助消息
*如果参数个数等于2,则输出到控制台
*如果参数个数等于3,则输出到文件
*/
intmain(intargc,char*argv[]){
usingnamespacestd;
if(argc==1){
showInfo();
return0;
}
ifstreamifs(argv[1],ios::in|ios::binary);
if(!ifs){
cerr<<"文件不能打开\n";
cerr<<"按任意键退出……";
getchar();
exit(1);
}
if(argc==2)
printHex(ifs,cout);
elseif(argc==3){
ofstreamofs(argv[2],ios::out);
printHex(ifs,ofs);
}
else{
showInfo();
exit(2);
}
cout<<"\n执行成功\n";
cout<<"按任意键退出……";
getchar();
return0;
}
//注意,参数应为引用类型voidprintHex(std::ifstream&ifs,std::ostream&ostream){
usingnamespacestd;
ostream<<setfill('0')<<hex<<uppercase;
unsignedcharbyte;
unsignedlongcount=0;
while(true){
ostream<<setw(8)<<count<<"";
for(inti=0;i<8;++i){
if(ifs.read((char*)&byte,1))
ostream<<setw(2)<<(int)byte<<"";
else
gotoendfile;
}
ostream<<"";
for(inti=0;i<8;++i){
if(ifs.read((char*)&byte,1))
ostream<<setw(2)<<(int)byte<<"";
else
gotoendfile;
}
ostream<<endl;
count+=16;
}
endfile:
ostream<<setfill('')<<dec;
}
voidshowInfo(){
usingnamespacestd;
cout<<"命令形式:ShowHex[filename][destfilename]\n";
cout<<"表示将filename的内容以16进制形式输出到destfilename\n";
cout<<"\n";
cout<<"如果参数个数等于0,则打印出帮助消息\n";
cout<<"如果参数个数等于1,则输出到控制台\n";
cout<<"如果参数个数等于2,则输出到文件\n";
cout<<"按任意键退出……";
getchar();
}