前言

二进制文件的读写是程序员们经常会遇到的一个场景,难是不难,但如果不熟悉的话,等到要用的时候还是会着急忙慌的。因此本文将结合一个具体的例子来介绍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语言 二进制文件读写实例讲解相关推荐

  1. vs调用css写的c语言程序,c语言文件读写实例

    #include"ccn.h" main(){FILE *in,*out; char ch,infile[10],outfile[10文件使用方式 意义 "rt" ...

  2. c语言open 函数,实例讲解C语言OPEN函数语法及其应用

    open是一个非标准的低级文件I/O函数,返回的是文件的低级句柄,原型: int open(char* path, int access, ...); open是一个可变参数的函数实现,后面的可变参数 ...

  3. C语言文件读写VS2017 (tcy)

    1.1.函数 函数 说明 打开关闭文件: 代码首行写:#define _CRT_SECURE_NO_WARNINGS FILE *fopen(const char *filename, const c ...

  4. C语言文件读写(3)-二进制文件读写操作

    C语言文件读写-二进制文件读写操作 先说说什么是二进制文件,二进制文件是相对于文本文件而言的,文本文件是由一行一行的字符的有序序列组成的.二进制文件就没有行的概念了,也是由有序的字符组成的,但是在写入 ...

  5. php rsa加密实例,关于PHP语言的RSA加密实例讲解

    本文主要向大家介绍了关于PHP语言的RSA加密实例讲解,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 这几天做了一些接口的对接需要用到RSA加密,百度一番发现原来有个openssl_p ...

  6. python逐行写入文件_python逐行读写txt文件的实例讲解

    实例如下所示: # -*-coding:utf-8-*- import os file_obj = open("test2.txt") all_lines = file_obj.r ...

  7. linux dd命令制作软盘,[Ubuntu]dd 命令,软盘读写实例:二进制文件.bin -镜像文件 .img - 软盘设备 /dev/fd0...

    本文将利用linux的dd命令往软盘的0道0面1扇区(即主引导扇区)写入数据: 实现在屏幕上显示asm这个三个字符的功能: 由于Ubuntu系统以软盘(floppy disk)作为启动盘,当选择系统从 ...

  8. C语言实现生成BMP图片文件(BMP文件格式,二进制文件读写)

    Git地址: https://gitee.com/whik/bmp_gen_c_and_verilog/tree/master/c BMP文件格式详解参考: Verilog实现生成BMP文件(BMP文 ...

  9. c语言中字符指针变量输入,C语言指针基础知识实例讲解

    对程序进行编译的时候,系统会把变量分配在内存单位中,根据不同的变量类型,分配不同的字节大小.比如int整型变量分配4个字节,char字符型变量分配1个字节等等.被分配在内存的变量,可以通过地址去找到, ...

  10. 用C语言随机读写二进制文件

    本节主要讨论如何使用C语言随机读写二进制文件. 本文引用自作者编写的下述图书; 本文允许以个人学习.教学等目的引用.讲授或转载,但需要注明原作者"海洋饼干叔 叔":本文不允许以纸质 ...

最新文章

  1. python列表操作:追加元素到列表的代码
  2. java静态和动态的区别是什么意思_Java中的动态和静态多态性有什么区别?
  3. javamail读取并发送完整的html页面
  4. ElasticSearch简介与安装
  5. delphi XE 學習筆記二:TThread.CreateAnonymousThread
  6. SAP UI5库文件的加载细节探讨
  7. PHP将字符串首字母大小写转换
  8. struts2+ajax+json使用实例
  9. ggplot2柱状图
  10. 在没有Docker容器的Ubuntu上安装SQL Server 2019
  11. linux 挂起后无法唤醒屏幕
  12. idea启动 tomcat 原理解析
  13. 奥城大学计算机专业,2018年美国大学硕士双录取最全名单
  14. 多款比较好用又免费的设计工具
  15. “天河一号”算一小时13亿人算340年
  16. 基于mindwave脑电波进行疲劳检测算法的设计(5)
  17. linux如何彻底删除一个用户
  18. mysql rollup函数_Mysql,Oracle使用rollup函数完成行列统计
  19. JETSON TX2烧写系统
  20. 不可思议的大公司组织结构图

热门文章

  1. java实现导出excel表_Java导出网页表格Excel过程详解
  2. 微信小程序下载Excel到本地
  3. Dev中ChartControl——属性熟悉与简单应用
  4. 微信打飞机--Java版
  5. 微软更新补丁目录查询
  6. AJAX框架都有哪些是常用的
  7. 做vue项目时报错,Error: spawnSync C:\Program Files\Java\jre1.8.0_201 ENOENT的解决办法!!!简单粗暴!!!
  8. PSP3000破解原理——缓冲区溢出漏洞随谈
  9. CSND默认markdown样式
  10. 优质的vray视频教程素材推荐,不容错过