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();
    }
  • 相关阅读:
    判断日期是否是法定节假日或者休息日
    linux版powershell安装教程(.net core版)
    两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍
    powershell中使用超大内存对象
    powershell脚本,命令行参数传值,并绑定变量的例子
    在docker容器中安装和使用,linux版的powershell
    powershell开源新闻及简介
    用powershell+excel行列转置三步走
    让powershell同时只能运行一个脚本(进程互斥例子)
    powershell玩转SQL SERVER所有版本
  • 原文地址:https://www.cnblogs.com/hdtianfu/p/2220107.html
Copyright © 2011-2022 走看看