首页 > 编程语言 >C/C++ 文件IO 拷贝文件,将二进制文件写为十六进制

C/C++ 文件IO 拷贝文件,将二进制文件写为十六进制

时间:2023-02-01 13:55:37浏览次数:46  
标签:文件 十六进制 二进制 ret C++ fp2 include

查看代码
 #include <fstream>
#include <iostream>
#include <iomanip>
//#include "flow.h"

unsigned char buf[2048];
unsigned char flow[10];
void read_f(){
    // 读文件的十六进制并保存到文件中
    size_t ret;

    // rb是读二进制
    FILE *fp = fopen("./hello.exe", "rb");
    if (fp == nullptr) return;

    // wb是写二进制
    // 因为要保存二进制,所以不以二进制方式写
    FILE *fp2 = fopen("./flow.h", "w");
    if (fp2 == nullptr) return;

    int sz = 0;

    while ((ret = fread(buf, 1, 2048, fp))) {
        printf("%llu\n", ret);
        // C语言文件拷贝 通过文件io的方式实现
//        fwrite(buf, 1, ret, fp2);
        for (int i = 0; i < ret; i++) {
            fprintf(fp2, "0x%02x, ", (unsigned char)buf[i]);
            if (sz % 8 == 7) fprintf(fp2, "\n");
            sz++;
        }
    }

    fclose(fp);
    fclose(fp2);
}

// size : 2447825
// 将十六进制写回成文件
// C++
void write_f() {
    std::ofstream out("./copy.exe", std::ios::binary);
//    for (int i = 0; i < 2447825; i++) out << flow[i];
    out.write((char *)flow, 2447825);
    out.flush();
    out.close();
}

void copy_f() {
    // C++ 文件拷贝
    std::ifstream in("./hello.exe", std::ios::binary);
    std::ofstream out("./copy.exe", std::ios::binary);
    if (!in.is_open()) return;
    if (!out.is_open()) return;

    out << in.rdbuf();

    in.close();
    out.close();
}

void read_f_cpp() {
    // C++ 将文件保存为二进制
    std::ifstream in("./hello.exe", std::ios::binary);
    std::ofstream out("./flow.h", std::ios::out);
    if (!in.is_open()) return;
    if (!out.is_open()) return;

    unsigned int sz = 0;
    while (in.read((char *)buf, 2048)) {
        std::streamsize num = in.gcount();
        for (std::streamsize i = 0; i < num; i++) {
            out << "0x" << std::setw(2) << std::setfill('0') << std::hex << (unsigned)buf[i] << ", ";
            if (i % 8 == 7) out << std::endl;
            sz++;
        }
    }

    in.close();
    out.close();
}

int main() {

//    read_f();
//    write_f();
//    copy_f();
    read_f_cpp();
    return 0;
}

标签:文件,十六进制,二进制,ret,C++,fp2,include
From: https://www.cnblogs.com/correct/p/17082316.html

相关文章

  • 新建文件格式
    .c:/***********************************************************************************************************************@filexxx.c*@brief*@de......
  • php读取大文件的方法
    1、使用file函数直接读取$starttime=microtime_float();ini_set('memory_limit','-1');$file="testfile.txt";$data=file($file);$line=count($data);//总行数$las......
  • PHP读取流文件
    $filepath='http://www.vip.com/down';$fp=fopen($filepath,"r");Header("Content-type:application/octet-stream");Header("Ac......
  • 【八大数据排序法】选择排序法的图形理解和案例实现 | C++
    第十五章选择排序法:::hljs-center目录第十五章选择排序法●前言●认识排序●一、选择排序法是什么?1.简要介绍2.图形理解3.算法分析●二、案例实现1.......
  • Ai JavaScript 把桌面下面 所有的png 图片导入到 ai里面的 脚本 获取某目录下所有文件
    vardoc=app.activeDocument;//创建一个目录varinput=newFolder("C:\\Users\\Administrator\\Desktop");//获取input目录下面的所有png图片得到一个数组对象vard......
  • 系统文件的权限
    目录​​Android系统的文件权限​​​​修改文件权限​​Android系统的文件权限先看下图分析:​​drwxrw-r--​​(1-3-3-3总共10位)第1位(文件类型):d(目录),-......
  • C#.NET 前端大文件上传
    ​ IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag     ......
  • Java 创建一个快捷窗口 用于监控文件夹与打开文件夹
    样式代码结构全部代码importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.File;importjav......
  • [快速学]C/C++编译器
    编译器谁维护平台版权VisualC++Microsofthttps://visualstudio.microsoft.com/MicrosoftWindows有免费版GCCCGNUhttps://www.gnu.org/多平台GP......
  • 16-项目实战-上传文件-实战
    1.创建数据表classUserInfo(models.Model):"""用户信息"""name=models.CharField(verbose_name="姓名",max_length=32)age=models.IntegerField(ve......