C语言 二进制文件读写实例讲解
前言
二进制文件的读写是程序员们经常会遇到的一个场景,难是不难,但如果不熟悉的话,等到要用的时候还是会着急忙慌的。因此本文将结合一个具体的例子来介绍C语言中的二进制文件读写,这也是我自我学习的一个记录。
一、函数介绍
在本例中,我们尝试在一个文件中写入10个字节的数据,其中每个字节均为0xFF
,然后我们再将数据读取出来。为了完成这个任务,我们需要三个函数,我们一个个来看。
- 第一个函数为
fopen()
,它的函数原型如下
FILE *fopen(const char *__restrict__ _Filename, const char *__restrict__ _Mode)
顾名思义,该函数用于打开一个文件,第一个参数代表文件名,第二参数代表访问模式,比如读r
、写w
,它的返回值是一个指针。(更多的访问模式本处就不一一列举了,大家可自行查阅)
- 第二个函数为
fwrite()
,它的函数原型为
size_t fwrite(const void *__restrict__ _Str, size_t _Size, size_t _Count, FILE *__restrict__ _File)
该函数的作用是往文件中写入数据。__restrict__ _Str
为写入数据块的首地址,参数_Size
与_Count
决定了写入的数据长度,_Size
是每个元素的长度,_Count
是元素的个数,怎么理解呢,如下图所示,总数据被分为了3块,每块1个字节。
1B | 1B | 1B |
---|
__restrict__ _File
就是我们使用fopen()
之后得到的文件指针,我们通过它往文件里写数据。
- 第三个函数为
fread()
,它的函数原型如下所示
size_t fread(void *__restrict__ _DstBuf, size_t _ElementSize, size_t _Count, FILE *__restrict__ _File)
该函数的作用是从文件中读取数据。参数的含义与fwrite()
类似,第一个参数为目标地址,也就是你想把数据存在哪里,参数_ElementSize
、_Count
、__restrict__ _File
的含义与fwrite()
中的一样,只是__restrict__ _File
指向的是你想读取的文件。
二、代码
有了上面的三个函数,我们就可以编写代码来实现我们的例程了。代码如下:
#include<stdio.h>
int main()
{// 文件指针pdFILE *pd = NULL;unsigned __int8 a[10];unsigned __int8 b[10];int i; for (i = 0; i < 10; i++){a[i] = 0xff;}// 写入二进制文件// 文件名:"test.bin", 访问方式:"wb"pd = fopen("test.bin", "wb");// 数据块首地址: "&a",元素大小: "sizeof(unsigned __int8)", 元素个数: "10", 文件指针:"pd"fwrite(&a, sizeof(unsigned __int8), 10, pd);fclose(pd);// 读取二进制文件// 文件名:"test.bin", 访问方式:"rb"pd = fopen("test.bin", "rb");// 数据块首地址: "&b",元素大小: "sizeof(unsigned __int8)", 元素个数: "10", 文件指针:"pd"fread(&b, sizeof(unsigned __int8), 10, pd);for (i = 0; i < 10; i++){printf("b[%d] = 0x%x\n", i, b[i]);}fclose(pd);
}
生成test.bin
文件后,我们可以用二进制查看工具看一下文件里的数据,看是不是和我们预期的一样。这里给大家推荐一个二进制文件查看器:
Free Hex Editor Neo
用它就可以打开我们的test.bin
了。
最后,欢迎大家交流指正~
C语言 二进制文件读写实例讲解相关推荐
- vs调用css写的c语言程序,c语言文件读写实例
#include"ccn.h" main(){FILE *in,*out; char ch,infile[10],outfile[10文件使用方式 意义 "rt" ...
- c语言open 函数,实例讲解C语言OPEN函数语法及其应用
open是一个非标准的低级文件I/O函数,返回的是文件的低级句柄,原型: int open(char* path, int access, ...); open是一个可变参数的函数实现,后面的可变参数 ...
- C语言文件读写VS2017 (tcy)
1.1.函数 函数 说明 打开关闭文件: 代码首行写:#define _CRT_SECURE_NO_WARNINGS FILE *fopen(const char *filename, const c ...
- C语言文件读写(3)-二进制文件读写操作
C语言文件读写-二进制文件读写操作 先说说什么是二进制文件,二进制文件是相对于文本文件而言的,文本文件是由一行一行的字符的有序序列组成的.二进制文件就没有行的概念了,也是由有序的字符组成的,但是在写入 ...
- php rsa加密实例,关于PHP语言的RSA加密实例讲解
本文主要向大家介绍了关于PHP语言的RSA加密实例讲解,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 这几天做了一些接口的对接需要用到RSA加密,百度一番发现原来有个openssl_p ...
- python逐行写入文件_python逐行读写txt文件的实例讲解
实例如下所示: # -*-coding:utf-8-*- import os file_obj = open("test2.txt") all_lines = file_obj.r ...
- linux dd命令制作软盘,[Ubuntu]dd 命令,软盘读写实例:二进制文件.bin -镜像文件 .img - 软盘设备 /dev/fd0...
本文将利用linux的dd命令往软盘的0道0面1扇区(即主引导扇区)写入数据: 实现在屏幕上显示asm这个三个字符的功能: 由于Ubuntu系统以软盘(floppy disk)作为启动盘,当选择系统从 ...
- C语言实现生成BMP图片文件(BMP文件格式,二进制文件读写)
Git地址: https://gitee.com/whik/bmp_gen_c_and_verilog/tree/master/c BMP文件格式详解参考: Verilog实现生成BMP文件(BMP文 ...
- c语言中字符指针变量输入,C语言指针基础知识实例讲解
对程序进行编译的时候,系统会把变量分配在内存单位中,根据不同的变量类型,分配不同的字节大小.比如int整型变量分配4个字节,char字符型变量分配1个字节等等.被分配在内存的变量,可以通过地址去找到, ...
- 用C语言随机读写二进制文件
本节主要讨论如何使用C语言随机读写二进制文件. 本文引用自作者编写的下述图书; 本文允许以个人学习.教学等目的引用.讲授或转载,但需要注明原作者"海洋饼干叔 叔":本文不允许以纸质 ...
最新文章
- python列表操作:追加元素到列表的代码
- java静态和动态的区别是什么意思_Java中的动态和静态多态性有什么区别?
- javamail读取并发送完整的html页面
- ElasticSearch简介与安装
- delphi XE 學習筆記二:TThread.CreateAnonymousThread
- SAP UI5库文件的加载细节探讨
- PHP将字符串首字母大小写转换
- struts2+ajax+json使用实例
- ggplot2柱状图
- 在没有Docker容器的Ubuntu上安装SQL Server 2019
- linux 挂起后无法唤醒屏幕
- idea启动 tomcat 原理解析
- 奥城大学计算机专业,2018年美国大学硕士双录取最全名单
- 多款比较好用又免费的设计工具
- “天河一号”算一小时13亿人算340年
- 基于mindwave脑电波进行疲劳检测算法的设计(5)
- linux如何彻底删除一个用户
- mysql rollup函数_Mysql,Oracle使用rollup函数完成行列统计
- JETSON TX2烧写系统
- 不可思议的大公司组织结构图
热门文章
- java实现导出excel表_Java导出网页表格Excel过程详解
- 微信小程序下载Excel到本地
- Dev中ChartControl——属性熟悉与简单应用
- 微信打飞机--Java版
- 微软更新补丁目录查询
- AJAX框架都有哪些是常用的
- 做vue项目时报错,Error: spawnSync C:\Program Files\Java\jre1.8.0_201 ENOENT的解决办法!!!简单粗暴!!!
- PSP3000破解原理——缓冲区溢出漏洞随谈
- CSND默认markdown样式
- 优质的vray视频教程素材推荐,不容错过