gpt4 book ai didi

c++ - 将数据转换为 C header 作为存储为二进制文件的方式

转载 作者:行者123 更新时间:2023-11-30 04:19:40 26 4
gpt4 key购买 nike

在图形中,有很多关于创建用于存储 3d Assets 的自定义二进制文件格式的讨论,这样更常见的基于文本的格式(如 OBJ 和 COLLADA)就不必在运行时进行解析。有道理。

然而,实际创建此二进制文件并不那么简单,因为它涉及序列化或其他方法等技术,其中一些甚至不是由 C++ 本地处理的,除非在其最新变体中。

但我突然想到,如果我将其中一种基于文本的格式解析为 C 风格的 header ,其中的数据将被简单地解析为 floatstruct 声明,然后此数据将与应用程序的其余部分一起编译为二进制文件。也就是说,解析是在应用程序外部完成的,可能是通过脚本完成的,然后在编译时处理到二进制的转换,因为翻译单元包含 header 。

我的想法是否正确?这与实际创建二进制文件格式并走这条路相比如何?

最佳答案

您的想法是绝对正确的:您可以使用编译器的帮助将文本表示形式转换为二进制形式。我不会使用 header ,而是将数据放在一个单独的翻译单元中,并保留一个固定的 header ,其中包含脚本填充的数据结构的前向声明:

标题:

// This is fixed
extern float data_array[];
extern size_t data_array_cnt;

CPP 文件:

// This gets generated by a script
float data_array[] = {1.2, 3.4, 5.6, 7.89 };
size_t data_array_cnt = sizeof(data_array)/sizeof(float);

这两种方法之间最大的区别在于,在文件中保留二进制表示形式可以让您在编译完所有内容后修改所表示的内容。事实上,您可以在生产环境中换入另一个二进制文件,它会立即生效。相比之下,每次二进制数据需要更改时,编译器路径都会强制您重新编译程序:有效地,您的二进制数据“融入”了程序的内容。

在支持动态链接的环境中,您可以通过将二进制数据隔离在一个单独的动态链接库中,并从您的“主”代码中单独编译该库来制定一个折衷的解决方案。二进制数据仍然是代码的一部分,但现在您可以独立于程序的其余部分交换新数据。

关于c++ - 将数据转换为 C header 作为存储为二进制文件的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15717772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com