0

我们需要将一些数据存储为 c++ 头文件,以便我们可以将其包含在构建包中并随任何使用它的应用程序一起提供。

为此,我们使用

xxd -i data.png > data.h

这很好用,但 data.h 文件现在是 data.png 文件的 6 倍大。这意味着,如果 data.png 为 4MB,则 data.h 将为 24MB。

请问有没有办法将data.h文件压缩到更小的尺寸?

谢谢!

- - 更新 - -

谢谢大家的建议!我想我可以在这里澄清需要提供更多背景信息!

  1. 我们使用文件的理​​想方式是我们可以将它作为输入流打开
std::ifstream is;
infile.open("data.png");
somefunc(is) // a api function that takes std::istream as input

ps 文件不是 png 文件,而是脚本模型,我使用 png 作为示例,因为我发现它是“xxd -i”的更通用问题

  1. 我们没有找到一种方法可以将其作为要读取的文件提供,因为代码实际搜索的文件系统将在 Android/iOS 中。(仅移动系统上的文件可用,源代码将压缩在 .so 文件中)

  2. 使用头文件,我们可以做类似的事情

std::stringstream is;
is.write((char*)data_byte_array, data_byte_array_len)
somefunc(is)

源代码最终将构建为 lib.so。在我们的测试中,一个 70KB 的 data.h 最终会增加 45KB 到 lib.so。

4

2 回答 2

0

请问有没有办法将data.h文件压缩到更小的尺寸?

您可以使用任何无损压缩算法。该gzip程序是 POSIX 系统上常见的默认选择。

于 2022-02-23T21:22:42.443 回答
0

您可以使用objcopy -I binary. 有关更多详细信息,请参阅C/C++ with GCC:Statically add resource files to executable/library

于 2022-02-23T21:23:40.820 回答