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个字节。

1B1B1B

__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()
{
	// 文件指针pd
    FILE *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了。

最后,欢迎大家交流指正~

  • 19
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
C语言二进制文件存储指的是使用C语言编写的程序的执行文件或者数据文件二进制形式存储在计算机中。 在C语言中,源代码被编译成二进制机器码,这些机器码表示计算机执行指令的序列。编译器将这些指令生成为一个二进制文件,可以在操作系统上直接执行。二进制文件包含着程序的所有二进制代码,可以直接加载到内存中运行。 二进制文件的存储格式通常是特定于操作系统的,例如Windows下的可执行文件格式是PE格式,而Linux下的可执行文件格式是ELF格式。这些格式包括了二进制代码的布局、入口点地址和各个节(segment)的信息。节是二进制文件中的一部分,它包含了程序的代码、数据和其他信息。 除了可执行文件C语言还可以生成二进制数据文件。这些数据文件可以包含各种类型的数据,例如图片、音频、视频、数据库等。数据文件的格式通常取决于其内容的特性和使用方法。 在C语言中,开发者可以通过文件操作函数来读写二进制文件。例如,使用fopen函数可以打开一个二进制文件,使用fwrite函数可以将数据写入文件中,使用fread函数可以从文件中读取数据。这些函数可以根据需要以二进制形式读写数据,而不关心其内容的具体格式。 总而言之,C语言二进制文件存储是将源代码编译成机器码,并以特定的格式存储在计算机中的一种方式。这种存储方式可以用于生成可执行文件,也可以用于存储各种类型的二进制数据。通过文件操作函数,开发者可以方便地对二进制文件进行读写操作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TIME_LEAF

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值