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();
    }
  • 相关阅读:
    有功功率和无功功率
    变压器的一些知识点
    服创大赛_思考
    AndroidsStudio_找Bug
    服创大赛第一次讨论_2019-1-14
    AndroidStudio_TextView
    JVM 专题十三:运行时数据区(八)直接内存
    JVM 专题十二:运行时数据区(七)对象的实例化内存布局与访问定位
    JVM 专题十一:运行时数据区(六)方法区
    JVM 专题十:运行时数据区(五)堆
  • 原文地址:https://www.cnblogs.com/hdtianfu/p/2220107.html
Copyright © 2011-2022 走看看