将原始数据写入文件并使用 bin2c
Writing raw data to a file and using bin2c
好的,所以我对C++相当陌生,我遇到了一个程序,它可以获取exe或bin文件并将其放入.h文件中以用于C++。我遇到的问题是如何将 bin2c 生成的原始数据写入文件,然后重现相同的 exe。您可以在下面找到原始数据的代码。(使用cygwin进行编译。我不在电脑上,所以我无法使用代码标签来显示代码对不起。
const unsigned char raw_data[] = {
0x21, 0x20, 0xc2, 0xa6, 0xc3, 0xb4, 0xc2, 0xbf,
0xc3, 0x82, 0xc3, 0x8b, 0xc2, 0xa4, 0x20, 0xc3,
0x8d, 0xc3, 0x8c, 0x4c, 0x3f, 0x20, 0x20, 0xc3,
0x80, 0xc3, 0xbf, 0x20, 0x20, 0xc3, 0x80, 0xc3,
0xbf, 0xc2, 0xa5, 0x20, 0xc5, 0xa1, 0xe2, 0x84,
0xa2, 0xc2, 0xa9, 0x40, 0x20, 0x20, 0xc3, 0x80,
0xc3, 0xbf, 0x20, 0x20, 0xc3, 0x80, 0xc3, 0xbf,
0x60, 0x20, 0x6f, 0x72, 0x20, 0x60, 0x21, 0x20,
0x48, 0xc2, 0xb7, 0xc3, 0xb4, 0xc2, 0xbf, 0xc3,
0x82, 0xc3, 0x8b, 0xc2, 0xa4, 0x20, 0xc3, 0x8d,
0xc3, 0x8c, 0x4c, 0x3f, 0x20, 0x20, 0xc3, 0x80,
0xc3, 0xbf, 0x33, 0x33, 0x33, 0x3f, 0xc2, 0xa5,
0x20, 0xc5, 0xa1, 0xe2, 0x84, 0xa2, 0xc2, 0xa9,
0x40, 0x20, 0x20, 0xc3, 0x80, 0xc3, 0xbf, 0x66,
0x66, 0xc2, 0xa6, 0x40, 0x0a,
};
使用标准的 C++ I/O 体操:
#include <fstream>
std::ofstream outfile("output.bin", std::ios::binary);
if (!outfile) { /* error, die! */ }
outfile.write(reinterpret_cast<char const *>(raw_data), sizeof raw_data);
如果您愿意,可以将数组声明为 const char
数组并取消强制转换。
还有
我在 C++ 14 中制作的 bin2c 转换工具。最重要的是,它是开源的,不仅可以在Windows上运行,还可以在OSX(MAC(和Linux上运行。
你可以在 https://www.github.com/AraHaan/bin2c
我的工具最好的部分是它很快取决于文件大小,但至少它可以工作。当我发现这里和那里是否有错误时,我确实经常更新它,但至少它可以完成工作。我还在其中添加了一些编译时技巧,如果月份的日期小于 10,它会去除其中的一个空格以使处理后的文件看起来不错。当前的版本是v0.15.0到。另外,如果您想知道为什么 1 个构建失败,那是因为 travis 没有 clang 3.9 和 g++ 5.3+。但是,我建议在 g++ 6 或 clang 3.9 上构建它(由于实验性 C++ 14 文件系统标头,它处理的最低版本(。
希望这有助于解决其他想要bin2c工具的人的问题。我的还可以将文件制作成 C# 数组,以满足那些想要这样做的人。
此外,我的bin2c工具也有一个测试,该测试也提供了一个示例,该示例如下:
#include <string>
#include <iostream>
#include <fstream>
#include "VP.hpp"
int main()
{
std::string created_msg = "Created ";
created_msg += IMAGE_VP_NAME;
created_msg += ".";
std::string FILE_NAME = ".\";
FILE_NAME += IMAGE_VP_NAME;
std::ofstream f(FILE_NAME, std::ios::out | std::ios::binary | std::ios::ate);
f.write(reinterpret_cast<char const *>(IMAGE_VP), IMAGE_VP_SIZE);
std::cout << created_msg << std::endl;
std::cin.ignore();
return 0;
}
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- 将原始数据写入文件并使用 bin2c