将文件生成c语言文件
用图片资源作为例子,使用16进制编辑器如"HxD"打开

直接导出为c语言文件

查看导出的c语言文件,定义了一个rawData变量,里面储存的是图片的16进制数据

实际上也可以不用HxD,可以自己写一个程序,用二进制模式打开文件,然后根据数据生成一个类似的c语言文件储存文件信息,也是一样的效果。
使用生成的c语言文件
可以编写一个简单的头文件声明数据变量
resfile.h
在其他文件中使用只需要包含该头文件就可以了
test.c
编译时将导出的c语言文件与其他文件一起编译就可以了。
g++ export.c test.cpp -o test.exe
直接在内存中使用文件
可以直接在内存中使用,例如opencv库,可以使用cv::imdecode函数从内存中读取图片然后显示
//将文件数据拷贝到容器
std::vector<unsigned char> binaryData;
for(int i=0;i<sizeof(rawData)/sizeof(unsigned char);i++){
binaryData.push_back(rawData[i]);
}
//从数据中解码图片
cv::Mat decodedImage = cv::imdecode(binaryData,cv::IMREAD_UNCHANGED);
cv::namedWindow("Image", cv::WINDOW_NORMAL);
//显示图片
cv::imshow("Image", decodedImage);
cv::waitKey(0);
cv::destroyWindow("Image");
释放文件
释放到文件非常简单,直接使用二进制方式将内存中的数据写入文件
std::ofstream oFile("out.jpg",std::ios::binary);
if(oFile.is_open()){
oFile.write((const char*)rawData,sizeof(rawData));
oFile.close();
}
我编写了一个测试的程序,实现了使用opencv显示编译进程序中的图片,并且将图片释放到文件
#include <iostream>
#include <vector>
#include <fstream>
#include <opencv2/opencv.hpp>
#include "resfile.h"
int main(){
//将文件数据拷贝到容器
std::vector<unsigned char> binaryData;
for(int i=0;i<sizeof(rawData)/sizeof(unsigned char);i++){
binaryData.push_back(rawData[i]);
}
//从数据中解码图片
cv::Mat decodedImage = cv::imdecode(binaryData,cv::IMREAD_UNCHANGED);
cv::namedWindow("Image", cv::WINDOW_NORMAL);
//显示图片
cv::imshow("Image", decodedImage);
cv::waitKey(0);
cv::destroyWindow("Image");
//将文件数据导出到文件
std::ofstream oFile("out.jpg",std::ios::binary);
if(oFile.is_open()){
oFile.write((const char*)rawData,sizeof(rawData));
oFile.close();
}
return 0;
}
程序的运行过程,显示了程序中的图片,并释放图片到文件

当然除了图片文件,其他文件资源也是一样的办法