二进制读写文件

提示:文章

文章目录

  • 前言
  • 一、背景
  • 二、
    • 2.1
    • 2.2
  • 总结

前言

前期疑问:
本文目标:


一、背景

这个文章主要是针对二进制文件的读写

大概会分为c语言对二进制文件读写和c++对二进制文件的读写

查找资料看到这篇文章:二进制文件的读写操作,文章是分别对整型变量、数组、字符串进行读写。我其实想得到是对混合的数据的读写,但是我突然想到可以将整型数据转成char型然后使用字符串写成二进制啊。没毛病,那么很长的字符串(大于1024)是怎么写入呢。可以试一下。

二、c语言读写二进制文件

2.1

二进制读写文件

#include <iostream>
#include <stdio.h>
#include <string.h>struct BinaryWriteStruct
{char a;int b;float c;double d;char array[15];//std::string e;BinaryWriteStruct(){a = '0';b = 0;c = 0.0f;d = 0;memset(array, 0, sizeof(array));}
};typedef BinaryWriteStruct BinaryWrite;struct BinaryWriteStruct2
{char a;int b;float c;double d;char array[15];
};typedef BinaryWriteStruct2 BinaryWrite2;void BinaryWriteInteger()
{FILE* writeFile = fopen("E:\\writeInteger.txt", "wb");if (writeFile == nullptr) {printf("%s", "file open failed\n");}// 存储一个整型变量int a = -11; 	//-1的二进制:fwrite(&a, sizeof(int), 1, writeFile);fclose(writeFile);
}void BinaryReadInteger()
{FILE* readFile = fopen("E:\\writeInteger.txt", "r");if (readFile == nullptr) {printf("%s", "file open failed\n");}// 存储一个整型变量int a = 0; 	//-1的二进制:fread(&a, sizeof(int), 1, readFile);printf("a:%d\n", a);fclose(readFile);
}void BinaryWriteStruct()
{FILE* writeFile = fopen("E:\\writeStruct.txt", "wb");if (writeFile == nullptr) {printf("%s", "file open failed\n");}// 存储一个结构体变量BinaryWrite binaryWrite;binaryWrite.a = 'Q';binaryWrite.b = 1;binaryWrite.c = 2.1f;binaryWrite.d = 4;strcpy(binaryWrite.array, "hello world");//binaryWrite.e = "this ia a string";       //这边写入string会导致读不到正确的数据,fwrite是c函数,std::string是c++对象// 测试结构体,验证为什么BinaryWrite结构体不能定义时直接赋值初始化BinaryWrite2 binaryWrite2 = {'Q', 1, 2, 3, "test"};        //当结构体没有构造函数时可以这样初始化,有构造函数就要上述初始化方式fwrite(&binaryWrite, sizeof(BinaryWrite), 1, writeFile);fclose(writeFile);
}void BinaryReadStruct()
{FILE* readFile = fopen("E:\\writeStruct.txt", "rb");            //这边不写"rb"会读不到数据if (readFile == nullptr) {printf("%s", "file open failed\n");}// 存储一个整型变量BinaryWrite binaryWrite;fread(&binaryWrite, sizeof(BinaryWrite), 1, readFile);printf("a:%c\n", binaryWrite.a);printf("b:%d\n", binaryWrite.b);printf("c:%f\n", binaryWrite.c);printf("d:%f\n", binaryWrite.d);printf("array:%s\n", binaryWrite.array);//printf("e:%s\n", binaryWrite.e.c_str());fclose(readFile);
}void BinaryWriteString()
{char array[] = {"data:34567668-0-05678709886r434563212212225113e65r41325541235412344236544265344652344542365442356442653446""5234465234464236544235644524423445243442344244234452344523442534452434524345243452434562434562344524345245""454564544,data:34567668-0-05678709886r434563212212225113e65r4132554123541234423654426534465234454236544235""6442653446523446523446423654423564452442344524344234424423445234452344253445243452434524345243456243456234""4524345245454564544,data:34567668-0-05678709886r434563212212225113e65r413255412354123442365442653446523445""4236544235644265344652344652344642365442356445244234452434423442442344523445234425344524345243452434524345""62434562344524345245454564544,data:34567668-0-05678709886r434563212212225113e65r41325541235412344236544265""3446523445423654423564426534465234465234464236544235644524423445243442344244234452344523442534452434524345""243452434562434562344524345245454564544,data:34567668-0-05678709886r434563212212225113e65r4132554123541234""4236544265344652344542365442356442653446523446523446423654423564452442344524344234424423445234452344253445""2434524345243452434562434562344524345245454564544, end"};FILE* writeFile = fopen("E:\\writeString.nag", "wb");if (writeFile == nullptr) {printf("%s", "file open failed\n");}fwrite(array, sizeof(char), sizeof(array), writeFile);fclose(writeFile);
}
void BinaryReadString()
{FILE* readFile = fopen("E:\\writeString.txt", "rb");if (readFile == nullptr) {printf("%s", "file open failed\n");}char array[10000] = {'\0'};char tempStr[100] = {'\0'};int count = 0;while (!(feof(readFile) || ferror(readFile))) {fread(tempStr, sizeof(char), sizeof(tempStr), readFile);strcpy(array + 100 * count, tempStr);count++;}if (ferror(readFile)) {printf("file read fail\n");}fclose(readFile);printf("%s\n", array);
}int main()
{// 二进制写入整型BinaryWriteInteger();BinaryReadInteger();// 二进制写入结构体BinaryWriteStruct();BinaryReadStruct();// 二进制写入字符串BinaryWriteString();BinaryReadString();return 0;
}

打印结果

a:-11
a:Q
b:1
c:2.100000
d:4.000000
array:hello world
data:34567668-0-05678709886r434563212212225113e65r4132554123541234423654426534465234454236544235644265344652344652344642
36544235644524423445243442344244234452344523442534452434524345243452434562434562344524345245454564544,data:34567668-0-05
678709886r434563212212225113e65r4132554123541234423654426534465234454236544235644265344652344652344642365442356445244234
45243442344244234452344523442534452434524345243452434562434562344524345245454564544,data:34567668-0-05678709886r43456321
2212225113e65r4132554123541234423654426534465234454236544235644265344652344652344642365442356445244234452434423442442344
52344523442534452434524345243452434562434562344524345245454564544,data:34567668-0-05678709886r434563212212225113e65r4132
554123541234423654426534465234454236544235644265344652344652344642365442356445244234452434423442442344523445234425344524
34524345243452434562434562344524345245454564544,data:34567668-0-05678709886r434563212212225113e65r4132554123541234423654
426534465234454236544235644265344652344652344642365442356445244234452434423442442344523445234425344524345243452434524345
62434562344524345245454564544, end

三、c++读写二进制文件

3.1

下面是c++二进制读写文件

void BinaryWriteStringByCpp()
{char array[] = {"data:34567668-0-05678709886r434563212212225113e65r41325541235412344236544265344652344542365442356442653446""5234465234464236544235644524423445243442344244234452344523442534452434524345243452434562434562344524345245""454564544,data:34567668-0-05678709886r434563212212225113e65r4132554123541234423654426534465234454236544235""6442653446523446523446423654423564452442344524344234424423445234452344253445243452434524345243456243456234""4524345245454564544,data:34567668-0-05678709886r434563212212225113e65r413255412354123442365442653446523445""4236544235644265344652344652344642365442356445244234452434423442442344523445234425344524345243452434524345""62434562344524345245454564544,data:34567668-0-05678709886r434563212212225113e65r41325541235412344236544265""3446523445423654423564426534465234465234464236544235644524423445243442344244234452344523442534452434524345""243452434562434562344524345245454564544,data:34567668-0-05678709886r434563212212225113e65r4132554123541234""4236544265344652344542365442356442653446523446523446423654423564452442344524344234424423445234452344253445""2434524345243452434562434562344524345245454564544, cpp end"};std::ofstream outputStream("E:\\writeStringByCpp.nag", std::ios::out | std::ios::binary);if (!outputStream.is_open()) {printf("file open failed\n");}outputStream.write(array, sizeof(array));
}void BinaryReadStringByCpp()
{std::ifstream inputStream("E:\\writeStringByCpp.nag", std::ios::in | std::ios::binary);if (!inputStream.is_open()) {printf("file open failed\n");}std::stringstream inputStr;inputStr << inputStream.rdbuf();std::string str(inputStr.str());printf("%s\n", str.c_str());
}int main()
{// c++二进制读写字符串BinaryWriteStringByCpp();BinaryReadStringByCpp();return 0;
}

打印信息

data:34567668-0-05678709886r434563212212225113e65r4132554123541234423654426534465234454236544235644265344652344652344642
36544235644524423445243442344244234452344523442534452434524345243452434562434562344524345245454564544,data:34567668-0-05
678709886r434563212212225113e65r4132554123541234423654426534465234454236544235644265344652344652344642365442356445244234
45243442344244234452344523442534452434524345243452434562434562344524345245454564544,data:34567668-0-05678709886r43456321
2212225113e65r4132554123541234423654426534465234454236544235644265344652344652344642365442356445244234452434423442442344
52344523442534452434524345243452434562434562344524345245454564544,data:34567668-0-05678709886r434563212212225113e65r4132
554123541234423654426534465234454236544235644265344652344652344642365442356445244234452434423442442344523445234425344524
34524345243452434562434562344524345245454564544,data:34567668-0-05678709886r434563212212225113e65r4132554123541234423654
426534465234454236544235644265344652344652344642365442356445244234452434423442442344523445234425344524345243452434524345
62434562344524345245454564544, cpp end

总结

未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python画图|中秋到了,尝试画个月亮(球体画法)

学习了一段时间的画图&#xff0c;已经掌握了一些3D图的画法&#xff0c;部分链接如下&#xff1a; python画图|极坐标下的3D surface-CSDN博客 python画图|3D参数化图形输出-CSDN博客 我们今天尝试一下月亮的画法。 【1】官网教程 首先还是到达官网教程学习&#xff1a; …

Java多线程3

1.有序性在并发编程中的含义。 有序性在并发编程中指的是在多线程环境下&#xff0c;程序的执行顺序应与单线程情况下保持一致&#xff0c;以避免出现不确定或错误的执行结果。 2.为何需要使用多线程进行程序设计&#xff1f; 使用多线程可以提高程序的效率&#xff0c;利用…

Mina protocol - 体验教程

Mina protocol - 体验教程 一、零知识证明( Zero Knowledge Proof )1、零知识证明&#xff08;ZKP&#xff09;的基本流程工作流程&#xff1a; 2、zkApp 的优势&#xff1a;3、zkApp 每个方法的编译过程&#xff1a; 二、搭建第一个zkapp先决条件1、下载或者更新 zkApp CLI​2…

黑神话悟空+云技术,游戏新体验!

近期&#xff0c;一款名为黑神话悟空的游戏因其独特的艺术风格和创新的技术实现在玩家中产生了不小的影响。 而云桌面技术作为一种新兴的解决方案&#xff0c;正在改变人们的游戏体验方式&#xff0c;使得高性能游戏可以在更多设备上流畅运行。 那么&#xff0c;黑神话悟空如…

Hazel 2024

不喜欢游戏的人也可以做引擎&#xff0c;比如 cherno 引擎的作用主要是有两点&#xff1a; 将数据可视化交互 当然有些引擎的功能也包含有制作数据文件&#xff0c;称之为资产 assets 不做窗口类的应用栈&#xff0c;可能要花一年才能做一个能实际使用的应用&#xff0c;只需…

游戏、网关等服务借助Docker容器化并使用Kubernetes部署、更新等

本文首发在这里 请先看完 实现负责消息转发、推送的网关服务负责网络、定时、坐下、站起、重连等&#xff0c;支持多类游戏的无锁房间 Docker容器化 Build and Push docker build -t panshiqu/game_server:latest -t panshiqu/game_server:1 -t panshiqu/game_server:1.0 -…

VSCode扩展连接虚拟机MySQL数据库

在虚拟机安装MySQL vscode通过ssh远程登录Ubuntu 在vscode终端运行以下命令。 sudo apt-get install mysql-server-5.7 用以下命令确认MySQL是否安装完成。 sudo mysql MySQL安装成功。 在VSCode安装SQL扩展 扩展名&#xff1a;MySQL Shell for VS Code。 安装完成后&am…

JavaScript高级——闭包的作用

1、使用函数内部的变量在函数执行完后&#xff0c;仍然存活在内存中&#xff08;延长了局部变量的生命周期&#xff09; 2、让函数外部可以操作&#xff08;读写&#xff09;到函数内部的数据&#xff08;变量/函数&#xff09; 3、函数执行完后&#xff0c;函数内部声明的局…

使用原生HTML的drag实现元素的拖拽

HTML 拖放&#xff08;Drag and Drop&#xff09;接口使应用程序能够在浏览器中使用拖放功能。例如&#xff0c;用户可使用鼠标选择可拖拽&#xff08;draggable&#xff09;元素&#xff0c;将元素拖拽到可放置&#xff08;droppable&#xff09;元素&#xff0c;并释放鼠标按…

vue3-print打印eletable某一行的数据

主页面的表格 <template><el-table :data"list"><el-table-column label"操作" align"center"><template #default"scope"><el-buttonlinktype"primary"click"handleType(scope.row)"…

java进销存系统源码:管店云进销存解决方案

在当今数字化转型的大背景下&#xff0c;企业对高效、可靠的进销存管理系统的需求日益增长。Java作为一种广泛使用的编程语言&#xff0c;以其成熟的技术栈和强大的生态系统&#xff0c;成为了开发高性能进销存系统的首选语言之一。本文将介绍一款基于Java进销存系统源码的“管…

c++刷题

17.电话号码的组合 来源于题解思路&#xff1a; 继承 CC14 KiKi设计类继承 #include <iostream> #include <memory> using namespace std; class Shape{ private:int x;int y; };class Rectangle:public Shape { public:Rectangle(int length,int width):Shape…

c语言中“typedef”关键字,对类型进行重命名

对类型简化:typedef关键字&#xff0c;是用来类型重命名&#xff0c;将复杂的类型简单化。 例如&#xff1a; typedef unsigned int unit; //将unsigned int 重命名为 uint. int main() { unsigned int num; uint num2; //重命名的可以直接引用。 re…

Kafka 的基本概念

一、Kafka 主要用来做什么 作为消息系统&#xff1a;Kafka 具备系统解藕&#xff0c;流量削峰&#xff0c;缓冲&#xff0c;异步通信&#xff0c;扩展性&#xff0c;可恢复性等功能&#xff0c;以及消息顺序性保障和回溯消费 作为存储系统&#xff1a;Kafka 把消息持久化到磁…

Cartographer源码理解

一、前言 最近一个半月&#xff0c;利用空余时间对Cartographer源码进行了简单的阅读&#xff0c;在这里做了个简单梳理&#xff0c;和大家分享交流。 cartographer源码量其实是有点大的&#xff0c;逐行逐句去解释实在是有心无力了&#xff0c;而且已经有大佬做了类似的事情…

Java笔试面试题AI答之单元测试JUnit(5)

文章目录 25. 简述什么是Junit 忽略测试&#xff08;Ignore Test&#xff09;&#xff1f;一、基本概念二、使用方法三、注意事项四、示例 26. 简述什么是Junit 超时测试&#xff08;Timeout Test&#xff09;&#xff1f;Junit 超时测试的主要特点包括&#xff1a;实现方式&am…

buildroot移植qt报错Info: creating stash file (补充qt添加字库)

移植qt库&#xff0c;编译文件报错Info: creating stash file /home/rbing/QT/uart/.qmake.stash Project ERROR: Unknown module(s) in QT: serialport rbingouc:~/QT/uart$ /home/rbing/linux/tool/buildroot-2022.02.9/output/host/usr/bin/qmake Info: creating stash fil…

一些写leetcode的笔记

标准库中的string类没有实现像C#和Java中string类的split函数&#xff0c;所以想要分割字符串的时候需要我们自己手动实现。但是有了stringstream类就可以很容易的实现&#xff0c;stringstream默认遇到空格、tab、回车换行会停止字节流输出。 #include <sstream> #incl…

部分动态铜皮的孤岛无法删除。报错

(SPMHCI-1): Cannot break shape into fragments. 网上寻找了很多答案&#xff0c;都不太理想&#xff0c;不是我想要的方法。 终于功夫不负有心人&#xff0c;在Cadence官方论坛找到了蛛丝马迹。 Breaking Static shape into fragments - PCB Design - PCB Design & IC …

枚举算法总结

枚举算法&#xff08;Enumeration Algorithm&#xff09;是一种简单而直接的算法设计策略&#xff0c;它通过列出问题的所有可能情况&#xff0c;逐一进行验证&#xff0c;直到找到问题的解。这种算法适用于问题的解空间不是太大&#xff0c;可以通过遍历所有情况来找到答案的情…