栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++】十六进制显示文件内容

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++】十六进制显示文件内容

#include 
#include 
#include 
#include  
#include 
#include 


int main(int argc ,char* argv[] ){

    if(argc<2){
        std::cerr << "usage: " << argv[0] << "   [wide] " <2? std::stoi(std::string(argv[2]) ):16 ; //每行的字节数

    const int buf_size  = 1024;
    uint8_t * buf = new uint8_t[buf_size];

    std::ifstream in;
    in.open(argv[1]);
    if(!in.is_open() ){
        std::cerr << "cannot open the file" <(buf) ,buf_size);
        int readnum  = in.gcount();

        for(unsigned i = 0 ;i(isprint(static_cast(buf[i]) )) ? static_cast(buf[i]) : '.' );
            //是否为两个字节为一组中的最后一个(没到行末)
            if(printed % 2 != 0 && printed % wide != (wide-1) ){
                std::cout << ' ';
            } else if(printed %wide == (wide-1) ) { // 行末
                std::cout << "    " << display.str() << 'n' ;
                display.str(""); //重置display
            }

            printed++;

        }

    }

    // 读到文件末尾

    if(printed %wide != 0){ //若最后一行没有满,要补上该行的打印形式
        int byte_num = wide - printed % wide; //最后一行剩余可打印的字节数
        int ws_num = 4+ byte_num/2  + 2* byte_num + (byte_num % 2 == 0? -1 :0   ) ;  //行末固定的分隔+ 两个字节之间的空白+ 未打印的字节序列所占空白 + 根据剩下字节数对分隔空白的修正
        std::cout << std::string(ws_num , ' ') << display.str() <
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648678.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号