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

#include <fstream>
#include <iostream>
#include <iomanip>

void printHex(std::ifstream& ifs, std::ostream& ostream);
void showInfo();
/* *
* 命令形式如:ShowHex [filename] [destfilename]
* 表示将filename的内容以16进制形式输出到destfilename

* 如果参数个数等于1,则打印出帮助消息
* 如果参数个数等于2,则输出到控制台
* 如果参数个数等于3,则输出到文件
*/
int main( int argc,  char *argv[]){
     using  namespace std;
    
     if (argc ==  1){
        showInfo();
         return  0;
    }
    
    ifstream ifs(argv[ 1], ios:: in | ios::binary);
     if (!ifs){
        cerr<< " 文件不能打开\n ";
        cerr<< " 按任意键退出…… ";
        getchar();
        exit( 1);
    }

     if (argc ==  2)
        printHex(ifs, cout);
     else  if (argc ==  3){
        ofstream ofs(argv[ 2], ios:: out);
        printHex(ifs, ofs);
    }
     else{
        showInfo();
        exit( 2);
    }
    cout<< " \n执行成功\n ";
    cout<< " 按任意键退出…… ";
    getchar();
     return  0;
}

//  注意,参数应为引用类型
void printHex(std::ifstream& ifs, std::ostream& ostream){
     using  namespace std;
    ostream<<setfill( ' 0 ')<<hex<<uppercase;

    unsigned  char  byte;
    unsigned  long count =  0;
     while ( true){
        ostream<<setw( 8)<<count<< "      ";
         for ( int i= 0; i< 8; ++i){
             if (ifs.read(( char*)& byte1))
                ostream<<setw( 2)<<( int) byte<< "   ";
             else
                 goto endfile;
        }
        ostream<< "   ";
         for ( int i= 0; i< 8; ++i){
             if (ifs.read(( char*)& byte1))
                ostream<<setw( 2)<<( int) byte<< "   ";
             else
                 goto endfile;
        }
        ostream<<endl;
        count +=  16;
    }

endfile:
    ostream<<setfill( '   ')<<dec;
}

void showInfo(){
     using  namespace std;
    cout<< " 命令形式:ShowHex [filename] [destfilename]\n ";
    cout<< " 表示将filename的内容以16进制形式输出到destfilename\n ";
    cout<< " \n ";
    cout<< " 如果参数个数等于0,则打印出帮助消息\n ";
    cout<< " 如果参数个数等于1,则输出到控制台\n ";
    cout<< " 如果参数个数等于2,则输出到文件\n ";
    cout<< " 按任意键退出…… ";
    getchar();
}

你可能感兴趣的:(C++)