二进制读写文件

news/2024/9/18 15:21:45/ 标签: 开发语言

提示:文章

文章目录

  • 前言
  • 一、背景
  • 二、
    • 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.ppmy.cn/news/1525476.html

相关文章

社群空间站9.9付费入群系统易支付版全套搭建教程

社群空间站9.9付费入群系统易支付版全套搭建教程 1.创建站点 2.搭建环境 php7.2 3.上传源码包 数据库批量修改sq9.dongge1.icu s10.dongge1.icu 改为你的域名 4.上传数据库 修改数据库文件/data/config/ 5.访问域名 6.账户密码 admin 123456 7.易支付修改…

Mastering openFrameworks_第十一章_网络

网络 网络为多个设备之间的数据交换提供了一种方式。它是一个主要组成部分,允许远程控制移动和平板设备应用程序中的一些参数,也用于使交互式项目在多台计算机上同步工作。在本章中,您将学习如何在openFrameworks项目中实现和使用OSC和TCP协议,具体如下: 网络基础 使用O…

【devops】devops-git之介绍以及日常使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

3.门锁_STM32_矩阵按键设备实现

概述 需求来源&#xff1a; 门锁肯定是要输入密码&#xff0c;这个门锁提供了两个输入密码的方式&#xff1a;一个是蓝牙输入&#xff0c;一个是按键输入。对于按键输入&#xff0c;采用矩阵按键来实现。矩阵按键是为了模拟触摸屏的按键输入&#xff0c;后续如果项目结束前还…

Android架构组件:MVVM模式的实战应用与数据绑定技巧

在Android开发中&#xff0c;MVVM&#xff08;Model-View-ViewModel&#xff09;架构模式已经成为一种流行的选择。MVVM模式将应用程序分为三个主要部分&#xff1a;Model&#xff08;数据层&#xff09;、View&#xff08;UI层&#xff09;和ViewModel&#xff08;连接数据和U…

Android MediaProjection录屏权限处理

MediaProjection服务在SystemServiceRegistry的静态块里面注册的 frameworks/base/core/java/android/app/SystemServiceRegistry.java public final class SystemServiceRegistry {private static final String TAG "SystemServiceRegistry";/** hide */public st…

软考攻略/超详细/系统集成项目管理工程师/基础知识分享10

4.3 应用架构&#xff08;掌握&#xff09; 应用架构的主要内容是规划出目标应用分层分域架构&#xff0c;根据业务架构规划目标应用域、应用组和目标应用组件 4.3.1 基本原则&#xff08;掌握&#xff09; &#xff08;1&#xff09;业务适配性原则&#xff1a;应用架构具备一…

停车位检测-停车场车位识别

YOLO Parking Spot 概述 停车场获取的图像训练了四个YOLO模型来检测车辆。目标是收集信息&#xff0c;并可能开发一种停车解决方案以改善交通流量并优化空间利用率。通过识别汽车&#xff0c;我们生成了一份报告&#xff0c;其中包含图像细节&#xff0c;如可用停车位的数量、…

VPP配置网卡多队列no bufs问题

在VPP配置文件/etc/vpp/startup.conf中启用网卡的多队列功能&#xff0c;指定接收和发送队列的数量。 dpdk { dev default { num-rx-queues 4 num-tx-queues 4 } 在测试中发现如下情况&#xff0c;网卡的rx no bufs错误计数非常高。 vpp # show hardware-interfaces GigabitEt…

51单片机-DS1302(实时时钟+可调时钟)(可参考主页上一节内容介绍)

作者&#xff1a;王开心 时间&#xff1a;2024.9.10 目的&#xff1a;手撕51 main.c #include <REGX52.H> #include "LCD1602.h" #include "DS1302.h" #include "Key.h" #include "Delay.h" #include "Timer0.h"u…

如何测量一个(传输网络)系统的容量

Little 定律就能反算系统容量&#xff0c;但我这篇文章要正着算。 假想一个理发店场景。李大爷拥有一家占地 50 平米的理发店&#xff0c;经理到店里理发如果已经有经理在理发&#xff0c;就要拿个券等待&#xff0c;请问李大爷需要印多少等待券&#xff1f; 这是个系统容量问…

Flutter自定义Icon的简易使用(两种)

方式一&#xff1a;利用第三方库&#xff08;建议&#xff09; 1、在阿里图标库(iconfont-阿里巴巴矢量图标库)上&#xff0c;加载购物车后&#xff0c;点击“下载素材”svg。 2、把下载的图片放入asstes目录下。​​​​​​​ 3、修改yaml配置文件&#xff0c;设置Icon图标所…

【自费2W真机测评】三款热门/旗舰宠物空气净化器米家、希喂、352对比试用!

我家老大是三个月大的时候接回来的&#xff0c;接回来前就是家教好的小猫咪一只&#xff0c;不乱尿、不掉毛的。看朋友家都被猫咪掉毛困扰着&#xff0c;我还嘚瑟觉得自己养可好了&#xff0c;根本不掉毛。养了三个月老大长成大猫猫了&#xff0c;我又觉得我可以了&#xff0c;…

【系统架构设计师】享元模式

享元模式(Flyweight Pattern)是一种结构型设计模式,它用于减少需要创建的对象数量,以节省内存。享元模式通过共享已经存在的对象来表示尽可能多的新对象,从而降低系统中对象的数量,提高性能。享元模式尤其适合于系统中存在大量相似对象的情况,通过共享公共的部分数据,可…

跟《经济学人》学英文:2024年09月14日这期 The sweet story of Peru’s blueberry boom

The sweet story of Peru’s blueberry boom Plucky farmers have transformed the market in only ten years plucky&#xff1a;英 [ˈplʌki] 勇敢的&#xff1b;无畏的&#xff1b;有胆识的 原文&#xff1a; Peru’s blueberry harvest is just beginning, and Ivan Ja…

GitLab CI Runner安装

参考文章&#xff1a;[花了两天&#xff0c;搞了Gitlab-Runner CI/CD实现自动化部署&#xff0c;可比Jenkins香太多啦&#xff01;&#xff01;&#xff01;&#xff01;_gitlab的cicd取代jenkens-CSDN博客] Gitlab的CI需要安装CI专用的GitLab Runner&#xff0c;否则跑不起来…

《 C++ 修炼全景指南:九 》打破编程瓶颈!掌握二叉搜索树的高效实现与技巧

摘要 本文详细探讨了二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;的核心概念和技术细节&#xff0c;包括插入、查找、删除、遍历等基本操作&#xff0c;并结合实际代码演示了如何实现这些功能。文章深入分析了二叉搜索树的性能优势及其时间复杂度&#xff0c;同…

pytorch正向传播没问题,loss.backward()使定义的神经网络中权重参数变为nan

记录一个非常坑爹的bug:loss回传导致神经网络中一个linear层的权重参数变为nan 1.首先loss值是正常数值&#xff1b; 2.查了好多网上的解决办法&#xff1a;检查原始输入神经网络数据有没有nan值&#xff0c;初始化权重参数&#xff0c;使用relu激活函数&#xff0c;梯度裁剪&a…

git如何灵活切换本地账号对应远程github的两个账号

git如何灵活切换本地账号对应远程github的两个账号 问题&#xff1a; 有时候我们会同时维护两个github的账号里面的仓库内容&#xff0c;这时候本地git需要频繁的切换ssh&#xff0c;以方便灵活的与两个账号的仓库可以通信。这篇日记将阐述我是怎么解决这个问题的。1. 第一个账…

黑龙江等保测评二级系统费用解析:如何合理预算?

在信息安全日益受到重视的今天&#xff0c;等保测评成为企业合规的重要环节。尤其是在黑龙江&#xff0c;随着网络安全法的实施&#xff0c;越来越多的企业开始关注等保测评的相关费用。那么&#xff0c;黑龙江等保测评二级系统的费用是如何计算的呢&#xff1f; 首先&#xf…