显示文件的16进制编码(C++)

摘要:
#include#include#includevoidprintHex;voidshowInfo();/***命令形式如:ShowHex[filename][destfilename]*表示将filename的内容以16进制形式输出到destfilename**如果参数个数等于1,则打印出帮助消息*如果参数个数等于2,则输出到控制台*如果参数个数等于3,则输出到文件*/intmain{usingnamespacestd;if{showInfo();return0;}ifstreamifs;if(!";getchar();exit;}ifprintHex;elseif{ofstreamofs;printHex;}else{showInfo();exit;}cout˂˂"\n执行成功\n";cout˂˂"按任意键退出……";getchar();return0;}//注意,参数应为引用类型voidprintHex{usingnamespacestd;ostream˂˂setfill('0')˂˂hex˂˂uppercase;unsignedcharbyte;unsignedlongcount=0;while{ostream˂˂setw˂˂count˂˂"";for{ifostream˂˂setw˂˂byte˂˂"";elsegotoendfile;}ostream˂˂"";for{ifostream˂˂setw˂˂byte˂˂"";elsegotoendfile;}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˂˂"按任意键退出……
#include<fstream>
#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();
}

免责声明:文章转载自《显示文件的16进制编码(C++)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[python]django rest framework写POST和GET接口R语言中的factor下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java 2进制和16进制的转换

Jave使用AES加密后的报文可能会出现乱码的情况,可以将它转化为16进制的字符串。 packagecom.test.aes; /*** * 进制转换工具类 * */ public classParseSystemUtil { /*** 将二进制转换成16进制 * * @parambuf * @retu...

python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别

1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABEAABERABEiABEzACIAACIRACIiACIzADMAADMRADMiADMzADd3REREQAAVQAAmQAA3QBVAABVVQ...

冷饭新炒:理解JDK中UUID的底层实现

前提 UUID是Universally Unique IDentifier的缩写,翻译为通用唯一标识符或者全局唯一标识符。对于UUID的描述,下面摘录一下规范文件A Universally Unique IDentifier (UUID) URN Namespace中的一些描述: UUID(也称为GUID)定义了统一资源名称命名空间。UUID的长度为128...

ultraedit 查看文件

转自:https://wenda.so.com/q/1481655902726192 1 UltraEdit在打开文件的时候,会对文件类型进行检查。如果是二进制文件,会自动转为16进制显示模式。如下图: 中间的16进制值就是文件的实际内容。可以查看,也可以点击进行编辑。 2 如果没有识别为二进制文件,但是想查看16进制显示内容,即以二进制文件方式进行查看...

转 shell中字分隔的妙用:变量IFS

IFS 的全称是 Interal Field Separator ,即“内部区域分隔符”,它也是一个内置环境变量,存储着默认的文本分隔符,默认下这分隔符是空格符(space character),制表符(tab) 以及新行(newline) 。先看下面一个简单示例: ? 1 2 3 4 5 6 7 8 #!/bin/sh msg="welcom...

【Matlab图像处理】学习笔记:读取16进制RGB文档转为彩色图片

在JPEG解码中对JPG图片进行了解码,解码的数据分为RGB三色,这三色数据(16进制)存放在3个文件中red.dat,green.dat,blue.dat;用matlab把这3色数据复原成图像。 这里仅对红色处理,其他两种颜色的处理方法类似。 这里解码的是一幅1080*1920的jpg图片。 red.dat文件中存放的是16进制的数据 格式如上图,这里...