当前位置:编程学习 > C/C++ >>

C++程序显示二进制文件“内容”

带领学生学二进制文件操作,要观察文件中的内容,用记事本不爽,二进制文件根本就不是记事的“业务范围”

  用EditPlus的HexView可以看,如图:

  

\

  在我当学生的时候,这个活计是用DOS下的外部命令Debug干的,如下图,进入DOS方式,转到你要显示文件的目录下,debug 文件名,接下来按图实施:

  

\

  其实在学习了二进制文件操作后,将每一个文件都当作二制文件,以每16字节为一个读取单位将文件读出来再显示,就是这个效果,可以编写出下面的程序:


[cpp] 
#include<iostream>  
#include<iomanip>  
#include <fstream>  
#include<cstdlib>  
using namespace std; 
 
int main( ) 

    char c[16]; 
    char f[100]; 
    cout<<"请输入文件名:"; 
    cin>>f; 
    ifstream infile(f,ios::in|ios::binary); 
    if(!infile) 
    { 
        cerr<<"open error!"; 
        exit(1); 
    } 
    while(!infile.eof()) 
    { 
        infile.read(c,16); 
        if(!infile.eof()) 
        { 
            for(int i=0; i<16; ++i) 
                cout<<setfill('0')<<setw(2)<<hex<<int((unsigned char)(c[i]))<<" "; 
            cout<<'\t'; 
            for(int i=0; i<16; ++i) 
                cout<<(c[i]?c[i]:'.'); 
            cout<<endl; 
        } 
    } 
 
    return 0; 

#include<iostream>
#include<iomanip>
#include <fstream>
#include<cstdlib>
using namespace std;

int main( )
{
    char c[16];
    char f[100];
    cout<<"请输入文件名:";
    cin>>f;
    ifstream infile(f,ios::in|ios::binary);
    if(!infile)
    {
        cerr<<"open error!";
        exit(1);
    }
    while(!infile.eof())
    {
        infile.read(c,16);
        if(!infile.eof())
        {
            for(int i=0; i<16; ++i)
                cout<<setfill('0')<<setw(2)<<hex<<int((unsigned char)(c[i]))<<" ";
            cout<<'\t';
            for(int i=0; i<16; ++i)
                cout<<(c[i]?c[i]:'.');
            cout<<endl;
        }
    }

    return 0;
}
  运行结果与上面两个的结果是一样的:

  \

  实际上,大一的同学要知道,和贺老师学习了两个学期的C++,你已经能做不少的事情了。联想第16周用ASCII文件做过的IDE中对代码加注释、整理格式之类的功能,是不是这样?

  在编程中发现一些可以做的事情,不妨做一做,就知道自己已经“能”了。

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,