📜  编写二进制文件 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:41:19.169000             🧑  作者: Mango

编写二进制文件 - C 编程语言

在 C 语言中,我们可以使用标准库提供的文件 I/O 函数对文件进行读取和写入。其中,对二进制文件的读写操作比较特殊,需要一些额外的注意事项。本文将介绍如何在 C 语言中编写二进制文件。

打开文件

要编写二进制文件,首先需要打开一个文件。使用标准库提供的 fopen 函数可以打开一个文件,并返回指向 FILE 类型的指针。

#include <stdio.h>

int main() {
    FILE *fp = fopen("file.bin", "wb");
    if (fp == NULL) {
        printf("Failed to open file.\n");
        return 1;
    }

    // ...

    fclose(fp);
    return 0;
}

以上代码中,fopen 函数的第一个参数是要打开的文件名称,第二个参数是打开方式。针对二进制文件,我们需要使用 "wb" 模式,其中 "w" 表示写入,而 "b" 表示二进制。

写入数据

成功打开文件之后,我们可以使用 fwrite 函数向其中写入数据。fwrite 函数的原型如下:

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

其中,ptr 表示要写入的数据的首地址,size 表示每个数据块的大小(以字节为单位),count 表示要写入的数据块的数量,而 stream 则是目标文件指针。

以下是一个将数组 data 中的数据写入二进制文件的示例:

#include <stdio.h>

int main() {
    FILE *fp = fopen("file.bin", "wb");
    if (fp == NULL) {
        printf("Failed to open file.\n");
        return 1;
    }

    int data[] = { 1, 2, 3, 4, 5 };
    int size = sizeof(int);
    int count = sizeof(data) / sizeof(int);
    fwrite(data, size, count, fp);
 
    fclose(fp);
    return 0;
}

以上代码中,我们首先定义了一个名为 data 的整数数组,包含了 1 到 5 的整数。然后,我们使用 sizeof(int) 获取每个整数的大小,计算出需要写入的数据块的数量,最后使用 fwrite 函数将数据写入二进制文件。

读取数据

读取二进制文件与写入类似,需要使用 "rb" 模式打开文件,并使用 fread 函数进行读取。fread 函数的原型如下:

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

其中,ptr 表示存储读入数据的内存地址,size 表示每个数据块的大小(以字节为单位),count 表示要读取的数据块的数量,而 stream 则是源文件指针。fread 函数返回值表示成功读取的数据块数量。

以下是一个读取二进制文件并输出其中的整数的示例:

#include <stdio.h>

int main() {
    FILE *fp = fopen("file.bin", "rb");
    if (fp == NULL) {
        printf("Failed to open file.\n");
        return 1;
    }

    int data[5];
    int size = sizeof(int);
    int count = sizeof(data) / sizeof(int);
    fread(data, size, count, fp);

    fclose(fp);
 
    for (int i = 0; i < count; i++) {
        printf("%d ", data[i]);
    }
    printf("\n");

    return 0;
}

以上代码中,我们首先定义了一个名为 data 的整数数组,然后使用 sizeof(int) 计算每个整数的大小,最后使用 fread 函数读取二进制文件中的数据。最后,我们使用 printf 函数输出读取出的整数。

结论

本文介绍了在 C 语言中编写二进制文件的方法。需要注意的是,二进制文件与文本文件存在差异,需要使用 "wb""rb" 模式打开文件,并注意每个数据块的大小。