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>