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

【C++】十六进制显示文件内容,第1张

【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() <					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5650871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存