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();
    }
  • 相关阅读:
    Jquery 图片预览插件 imgPreview
    对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)
    JavaScript拖拽实现(附注释),最经典!最简单!短小精悍!
    如何使用VC++写一个小程序来检测.NetFrameWork版本
    利用TreeView实现C#工具箱效果
    JavaScript中json对象和string对象之间的转化
    Ubuntu Server上搭建可用于生产环境的ASP.NET服务器
    winexec()函数的参数说明(c++)
    C#对文件夹的判断、创建、移动、删除
    C#程序不用安装.NET环境运行(让C#程序脱离.net框架)
  • 原文地址:https://www.cnblogs.com/hdtianfu/p/2220107.html
Copyright © 2011-2022 走看看