如何在Visual Studio中添加原始二进制数据到源代码中
C++: How to add raw binary data into source with Visual Studio?
我有一个二进制文件,我想直接嵌入到我的源代码中,所以它将被直接编译成.exe文件,而不是从文件中读取,所以当我启动程序时数据已经在内存中了。
我该怎么做?
我得到的唯一想法是将我的二进制数据编码为base64,把它放在字符串变量中,然后解码回原始二进制数据,但这是一个棘手的方法,会导致无意义的内存分配。此外,我希望将数据存储在.exe中,就像原始数据一样紧凑。
编辑:我想到使用base64的原因是因为我想使源代码文件尽可能小。
最简单和最可移植的方法是编写一个小的程序,将数据转换为c++源代码,然后编译然后把它链接到你的程序中。生成的文件可能看起来像:
unsigned char rawData[] =
{
0x12, 0x34, // ...
};
有这样的工具,一个典型的名称是"bin2c"。第一个搜索结果是这个页面。
你需要做一个char
数组,最好也做一个static const
。
可能需要一些注意,因为你不能有char
类型的文字,也因为通常C的char
数据类型的签名取决于实现。
您可能想使用像
这样的格式static const unsigned char my_data[] = { (unsigned char) 0xfeu, (unsigned char) 0xabu, /* ... */ };
请注意,每个unsigned int
字面值都被强制转换为unsigned char
,还有'u'后缀使它们无符号。
由于这个问题是针对c++的,在c++中可以具有char
类型的文字,因此您可以考虑使用这样的格式:
static const char my_data[] = { 'xfe', 'xab', /* ... */ };
因为这只是一个char数组,所以您也可以使用普通的字符串字面语法。嵌入零字节应该没问题,只要你不试图把它当作字符串:
static const char my_data[] = "xfexdab ...";
这是最紧凑的解决方案。事实上,您也可以在C中使用它
可以使用资源文件(.rc)。有时它们很糟糕,但对于基于Windows的应用程序,这是通常的方法。
为什么是base64?只需将文件存储在一个char*
中。
相关文章:
- 如何从dicom文件中读取二进制数据
- 如何在Qt中从数据库中检索二进制数据?
- readsome() 适合在 Windows 上读取二进制数据吗?
- 如何使用 redis-plus-plus 存储二进制数据,就像我想存储结构一样?@for_stack?
- 将包含二进制数据的 QByteArray 传递到按值运行
- 如何在 c++ 中生成十六进制二进制数据的 sha256 哈希?
- 在处理网络、二进制数据和序列化时应使用流或容器
- 我能确定从文件中读取的 32 字节二进制数据等于 256 位吗?
- C++:如何通过 curl 调用使用 HTTP post 请求发送二进制数据(protobuf 数据)
- 使用二进制数据更新 PostgreSQL 表
- 使用二进制数据和无符号字符
- sd_journal_send发送二进制数据.如何使用日志检索数据?
- 从带有 std::ifstream::read() 的文件中读取 int 遍历 char * 二进制数据
- 将文本和二进制数据连接到一个文件中
- 二进制模式 + 格式化文本操作或文本模式 + 二进制数据操作 - 有意义吗?
- 将整数的二进制数据转换为浮点数
- 使用 CMake 在可执行文件中嵌入二进制数据
- 二进制数据作为命令行参数
- 如何访问文件的二进制数据?
- 返回二进制数据的通用方式,而无需原始指针