You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++文件中存储文本以外的非文本数据 如图像、视频等资源

C++ 存储非文本资源的可行性及实现方案

完全可以将图像、视频等非文本资源存储到C++相关文件中,常见的实现方式分为两类:

  • 方案1:二进制资源转字符数组嵌入源码
    这是跨平台兼容性最好的方案,不需要额外依赖平台特性。你可以通过工具先把资源的二进制内容转换为C/C++兼容的十六进制字符数组,直接写入.h或.cpp文件中,编译后资源就会被直接打包进最终的可执行文件。
    示例代码结构如下:
// 资源头文件 resource.h
#ifndef RESOURCE_H
#define RESOURCE_H
// 声明资源数组和长度
extern const unsigned char demo_png[];
extern const unsigned int demo_png_len;
#endif
// 资源实现文件 resource.cpp
#include "resource.h"
// 存储图片二进制的十六进制数组,由转换工具自动生成
const unsigned char demo_png[] = {
  0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, // 后续为完整二进制对应的十六进制值
};
const unsigned int demo_png_len = sizeof(demo_png);

不需要手动转换二进制内容,Linux 下可直接用xxd -i 输入资源路径 输出文件路径命令一键生成对应数组文件,Windows 也有大量轻量转换工具可以完成该操作。

  • 方案2:使用平台专属资源编译机制
    Windows 平台可以编写RC资源脚本,把资源直接打包进PE格式的可执行文件,后续通过FindResource、LoadResource等系统API直接读取;Linux、macOS 平台也可以通过ld链接器直接把二进制资源链接到可执行文件中,不需要转成源码数组。

注意事项

  • 体积较小的资源(如几MB以内的图标、界面素材、短音效)适合用嵌入方式,不用处理资源路径匹配、文件丢失等问题,发布更方便
  • 大体积的高清视频、大尺寸图片不建议嵌入源码,会导致可执行文件体积过大、编译速度明显变慢,这类场景更建议资源和可执行文件分开存放,运行时动态读取
  • 嵌入的资源为只读属性,如果需要对存储的内容做修改,不能直接修改嵌入的数组,需要单独使用本地文件或其他可写存储介质存放可变更数据

内容的提问来源于stack exchange,提问作者Abhijay7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:15:02