zoukankan      html  css  js  c++  java
  • 显示文件的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();
    }
  • 相关阅读:
    (转)python字符串函数
    分享二:架构设计分享一:关于API分布式服务提供方式
    架构设计分享一:关于分布式系统的数据一致性问题(一)
    分享四:分布式事务设计-两段式提交
    分享三:mysql跨库查询
    PHP笔试题
    我的mysql学习心得
    linux分享一:进程全攻略--守护进程(服务)
    分享二:签名原理与算法
    linux命令详解:pgrep命令
  • 原文地址:https://www.cnblogs.com/hdtianfu/p/2220107.html
Copyright © 2011-2022 走看看