C ++:如何原始二进制数据添加到与Visual Studio源?

问题描述 投票:13回答:4

我有我想直接嵌入到我的源代码的二进制文件,所以它会被直接编译成.exe文件,而不是从文件中读取它,所以数据应该已经在内存时我启动程序。

我该怎么做呢?

唯一的想法,我得到了我的二进制数据编码为BASE64,把它放在一个字符串变量,然后将其解码回原始的二进制数据,但是这是棘手的方法,这将导致无谓的内存分配。另外,我想将数据存储在该.exe紧凑的原始数据。

编辑:我想使用Base64的原因是因为我想使源代码文件尽可能小了。

c++ visual-studio-2008 binary-data
4个回答
10
投票

最简单,最简便的方式是写一个小程序,将数据转换成C ++源代码,然后编译并将其链接到你的程序。这个生成的文件可能看起来是这样的:

unsigned char rawData[] =
{
    0x12, 0x34, // ...
};

5
投票

有工具,这一点,典型的名称是“bin2c”。第一个搜索结果是this page

你需要做一个char阵列,最好也使其static const

在C:

可能需要一定的照顾,因为你不能有一个char类型的文字,也因为C的char数据类型的一般的符号性是由实现。

你可能想使用的格式如

static const unsigned char my_data[] = { (unsigned char) 0xfeu, (unsigned char) 0xabu, /* ... */ };

请注意,每个unsigned int文字被转换为unsigned char,也是“U”后缀,使他们无符号。

由于这个问题对于C ++,在那里你可以有一个char类型的文字,你可以考虑使用的格式,例如这个,而是:

static const char my_data[] = { '\xfe', '\xab', /* ... */ };

因为这只是一个字符数组,你也可以同样使用普通字符串文字语法。嵌入零字节应该罚款,只要你不要试图把它作为一个字符串:

static const char my_data[] = "\xfe\xdab ...";

这是最紧凑的解决方案。事实上,你很可能使用了C,太。


3
投票

您可以使用资源文件(.RC)。有时候,他们是坏的,但对于基于Windows的应用程序,是通常的方式。


0
投票

为什么BASE64?只需将文件存储,因为它是在一个char*

© www.soinside.com 2019 - 2024. All rights reserved.