有时候当外部文件无法传入可执行程序运行环境时,此时可以将外部文件内容保存在一个char数组中,以源文件的形式和可执行程序源代码一起编译。
需要读取外部文件的代码只需包含该源文件即可,相当于是直接将外部文件编译进了目标文件。
- .C源文件中定义一个char数组,即数组原型
- 将文件按字节读入内存,并写到目标源文件中数组的初始化大括号中{}
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *image = fopen("big_face.yuv", "r");
if(NULL == image)
{
printf("open file failed!");
return 0;
}
fseek(image, 0, SEEK_END);
int nFileLen = ftell(image);
rewind(image);
unsigned char* image_dat = (unsigned char*)malloc(nFileLen+1);
if(NULL == image_dat)
{
printf("malloc failed!");
fclose(image);
return 0;
}
fread(image_dat, sizeof(unsigned char), nFileLen, image);
image_dat[nFileLen] = ' ';
fclose(image);
FILE *f2 = fopen("big_face.c", "w");
fprintf(f2, "unsigned char big_face[] = {
");
for (int i = 0; i < nFileLen + 1; i++)
{
fprintf(f2, "0x%x", image_dat[i]);
}
fprintf(f2, "
};
");
free(image_dat);
fclose(f2);
return 0;
}