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();
    }
  • 相关阅读:
    设计模式之开篇(C#语法) 爱拼才会赢
    C#语法糖之第一篇:自动属性&隐式类型 爱拼才会赢
    C#语法糖之第四篇: 扩展方法 爱拼才会赢
    C#中this在扩展方法的应用
    笔记20120215_转义字符_运算符
    Linux基本操作
    SQL创表
    软件测试的概念
    java 线程池
    Redis广播
  • 原文地址:https://www.cnblogs.com/hdtianfu/p/2220107.html
Copyright © 2011-2022 走看看