好的,所以我对C ++很新,我遇到了一个程序,它可以获取exe或bin文件并将其放入.h文件中以便与C ++一起使用。我遇到的问题是如何将bin2c genarats的原始数据写入文件然后重现相同的exe。您可以在下面找到原始数据的代码。 (使用cygwin进行编译。)我不在PC上,所以我无法使用代码标签来显示代码。
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,
};
答案 0 :(得分:4)
使用标准的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
数组并取消强制转换。
答案 1 :(得分:0)
还有我在C ++ 14中制作的bin2c转换工具。最重要的是它的开源,不仅适用于Windows,也适用于OSX(MAC)和Linux。
你可以在https://www.github.com/AraHaan/bin2c找到它&lt; - 这个链接肯定不会移动,除非github改变位置,很明显他们不应该这样做。
关于我的工具最好的部分是它很快取决于文件大小,但至少它的工作原理。当我发现这里和那里有错误但我至少完成了工作时,我会经常更新它。我还添加了一点编译时间,如果月份上的日期小于10,它会删除其中的一个空格,以使处理后的文件看起来不错。当前版本是v0.15.0到。此外,如果你想知道为什么1版本失败,那是因为travis没有clang 3.9和g ++ 5.3+。但是我建议在g ++ 6或clang 3.9上构建它(由于实验性的C ++ 14文件系统头,它处理的最小版本)。
希望这有助于解决其他想要使用bin2c工具的人。我也可以将文件转换成C#数组,以供那些想要这样做的人使用。
此外,我的bin2c工具还有一个测试,它也提供了一个示例,该示例如下:
public class NumberPickerPreference extends DialogPreference
{
public NumberPickerPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
setDialogLayoutResource(R.layout.numberpicker);
}
}