登录/注册

fread读取bin文件

更多

在 C 语言中,使用 fread 读取二进制文件(.bin)的基本步骤如下(完整代码示例见下方):

核心步骤:

  1. 打开文件:使用 fopen() 以二进制模式("rb")打开文件
  2. 检查文件指针:确认文件是否成功打开
  3. 定义缓冲区:创建存储数据的数组/内存块
  4. 读取数据:用 fread() 将文件内容读入缓冲区
  5. 处理数据:操作读取到的二进制内容
  6. 关闭文件:使用 fclose() 释放资源

完整代码示例

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *fp = fopen("data.bin", "rb");  // 关键:用二进制模式打开
    if (fp == NULL) {
        perror("文件打开失败");
        return EXIT_FAILURE;
    }

    // 可选:获取文件大小(动态分配内存时用)
    fseek(fp, 0, SEEK_END);
    long size = ftell(fp);
    rewind(fp);

    // 方式1:静态缓冲区(已知最大尺寸)
    unsigned char buffer[1024]; 

    // 方式2:动态缓冲区(适合大文件)
    // unsigned char *buffer = malloc(size);
    // if (!buffer) { /* 错误处理 */ }

    // 读取文件内容
    size_t bytes_read = fread(buffer, 1, sizeof(buffer), fp);
    if (bytes_read != sizeof(buffer) && !feof(fp)) {
        perror("读取错误");
        fclose(fp);
        return EXIT_FAILURE;
    }

    // 处理二进制数据(示例:打印16进制)
    printf("读取 %zu 字节:\n", bytes_read);
    for (int i = 0; i < bytes_read; i++) {
        printf("%02X ", buffer[i]);
        if ((i + 1) % 16 == 0) printf("\n");  // 每16字节换行
    }

    fclose(fp);
    return 0;
}

关键参数说明:

fread(buffer,       // 存储数据的缓冲区地址
      1,            // 每个数据块的字节数(1=逐字节)
      sizeof(buffer), // 要读取的块数量(结合1表示总字节数)
      fp);          // 文件指针

常见问题处理:

  1. 大文件读取

    // 使用动态内存分配
    unsigned char *buf = malloc(file_size);
    fread(buf, 1, file_size, fp);
  2. 分段读取

    while ((bytes_read = fread(chunk, 1, CHUNK_SIZE, fp)) > 0) {
       // 处理每个分段
    }
  3. 错误检查

    if (ferror(fp)) {
       // 处理读取错误
    }
  4. 结构体读取

    struct MyStruct data;
    fread(&data, sizeof(struct MyStruct), 1, fp);

重要提示:二进制文件的解析必须与写入格式完全匹配(包括数据类型、字节序、内存对齐等)。

使用example中的pwm播放mp3,在mp3_music_read_cb中使用fread读取,会出现fread读取异常怎么解决?

会出现fread读取异常。 2:如果使用spiffs stream,可以读取到mp3文

2024-06-28 07:37:59

keil如何生成bin文件

Keil是一种集成开发环境(IDE),专为ARM架构的嵌入式系统开发而设计。在Keil中生成bin文件是将代码编译并转换为可执行文件的过程。本文

2023-12-15 13:43:16

浅析HEX和BIN文件

BIN文件是单纯的二进制程序文件,内部没有地址信息。如果使用BIN

2023-04-24 17:32:45

DOP-B07S415触摸屏读取bin

DOP-B07S415触摸屏读取的bin,供参考

资料下载 ningminsheng 2022-11-02 16:41:34

Keil开发环境如何生成BIN文件

作者:王超首发:电子电路开发学习为什么需要BIN文件呢?有些烧录器只支持BIN文件

资料下载 李鸿 2022-01-26 19:29:31

串口通信之读取与发送及LabView文件下载

串口通信之读取与发送及LabView文件下载

资料下载 ABC_Lee 2021-04-26 11:06:21

python文件读取的源代码免费下载

本文档的主要内容详细介绍的是python文件读取的源代码免费下载。

资料下载 佚名 2020-08-07 17:14:00

如何在MDk生成bin格式的文件

习惯于使用*.bin格式的文件,甚至有些嵌入式软件开发者已经拥有了*.bin格式文件

资料下载 佚名 2019-05-16 17:22:15

常用的BIN文件操作总结

BIN文件,即二进制文件,广泛应用于嵌入式,我们常用的Firmware通常会以BIN

2023-02-28 14:34:41

怎么去解决posix文件系统文件读取异常的问题呢?

在移植wavplay过程中,发现文件读取异常,获取的WAV文件描述错误。wavplay中用到fopen、

2023-02-13 13:57:27

单片机中的hex和bin文件

经过这几步后,程序下载工作就完成了,在以上的步骤中我们并没有选择要把程序下载到单片机的哪块内存中,即不需要设置地址。因为HEX文件内部的信息已经包括了地址。 单片机一般是下载hex文件。

2022-04-18 10:16:20

stm32读取bin文件

stm32读取bin文件,关注、星标公众号,不错过精彩内容转载:芯片之家来源 |阿莫论坛,作者 | ilovepp首先你要有一个

2021-07-16 07:14:28

hex文件bin文件有什么区别?

单片机程序编译之后,除了生成hex文件之外还生成了bin文件,实际它们都是单片机的下载

2021-06-15 14:43:31

dsp读取windows下文件的原理问题

在代码中使用fopen,fread读取windows平台下的文件。我有一个问题,通过仿真器仿真,可执行

2020-12-24 11:14:42

MDK -ARM如何生产Bin文件

MDK-ARM如何生产Bin文件

2020-03-14 10:59:51

7天热门专题 换一换
相关标签