当前位置: 首页 > article >正文

linuxC读取bin文件

目录

    • 前言
    • 一、定义buffer大小
    • 二、实现读取函数
    • 三、头文件

前言

笔记总结将bin文件一次性读取到一个buffer中,然后按一定长度向其它地方进行转移;

一、定义buffer大小

适用k大小级别的文件,嵌入式中常见的配置文件、参数文件等;
假设文件大小为不超过15k;
定义uint8_t buffer[20480],20k大小存储文件;
定义uint8_t buffer_line[512],一次向其它地方转移的数据buffer大小;

二、实现读取函数

void load_binfile(const char *filepath) 
{
    FILE *fp;
    size_t bytes_read;
    int ret = 0;
    struct stat st;
    size_t line_size = 0;
    line_size = sizeof(buffer_line)/sizeof(buffer_line[0]);
    memset(buffer,0x00,sizeof(buffer)/sizeof(buffer[0]));
    memset(buffer_line,0x00,sizeof(buffer_line)/sizeof(buffer_line[0]));
    
    // 打开文件
    printf("open filename:%s\n",filepath);
    fp = fopen(filepath, "rb");
    if (fp == NULL) {
        printf("error open file\n");
    }
    //get file len
    ret = stat(filepath, &st);
    if (ret != 0) {
        printf("error get file size\n");
    }
    printf("File size: %ld bytes\n", st.st_size);
    //read file
    if ( (bytes_read = fread(buffer, 1, st.st_size, fp)) > 0 )
    {
     printf("read bytes:%ld\r\n",bytes_read);
    }
    uint32_t i;
    for(i =0;i<(bytes_read/line_size);i++)
    {
      memcpy((void *)buffer_line,&buffer[i*line_size],line_size);
      //log
      for(uint32_t j=0;j<line_size;j++)
      {
        //printf("%02X ",buffer_line[j]);
      }
      printf("\n");
      /*对buffer_line进行其它处理*/
    }
    memcpy((void *)buffer_line,&buffer[i*line_size],bytes_read%line_size);
    //log
    for(uint32_t j=0;j<bytes_read%line_size;j++)
    {
        //printf("%02X ",buffer_line[j]);
    }
    printf("\n");
    /*对不满一个buffer_line的数据进行其它处理*/
    
    // 关闭文件
    fclose(fp);
}

三、头文件

#include <stdio.h>
#include <sys/stat.h>
#include <string.h>


http://www.kler.cn/news/354002.html

相关文章:

  • 大数据面试题整理——MapReduce
  • 传染病防控宣传系统的设计与实现小程序springboot+论文源码调试讲解
  • Java | Leetcode Java题解之第482题秘钥格式化
  • react-JSX
  • 《沈阳工业大学学报》
  • Spring Boot动态数据源切换功能详解
  • 群晖前面加了雷池社区版,安装失败,然后无法识别出用户真实访问IP
  • React中的函数组件与类组件
  • 【Bug】docker容器之间网络通讯失败
  • 在vue中v-show不起作用
  • Axure重要元件三——中继器表单制作
  • 图书管理智能化:Spring Boot进销存系统
  • Spring如何通过三级缓存解决循环依赖的问题
  • 5G对无人机的影响!
  • 简述RESTFul风格的API接口
  • 【Git】基本操作+分支管理
  • 探索社交网络中的情感脉动 | 微博评论舆情分析系统
  • Cesiumlab发布3dtiles白膜流程与前端可视化加载
  • 基于SpringBoot的课程辅助教学系统
  • 信息收集笔记