首页 > 解决方案 > 变量中的 C++ 二进制

问题描述

我想用 Python 读取二进制文件,然后将二进制文件存储在 C++ 程序的头文件中。如何存储此二进制数据以供以后使用,例如将其写入 .exe 文件以执行它?我应该使用什么编码?

也是例如 \x00 ASCII 还是 HEX?我可以将二进制编码为 ASCII,然后将其存储在头文件中以供以后在 C++ 中使用,然后随时将其转换为二进制以将变量内容写入二进制格式的文件吗?我怎样才能做到这一点。

再澄清一点。C++ 头文件将有一个存储二进制数据的变量,但我不知道如何实现,因为我认为这不像将二进制数据倒入这样的 char 指针那么简单

char *binary = "?>!#{PL{"; // Some unreadable by text editors binary data go here

我觉得应该更像

char *binary = "\x00\x01\x04"; // When I encoded it in ASCII it was in this format, but I remember that HEX format was similar too maybe even the same?

甚至以这种格式将其存储在数组中

char binaryp[] = { 0x546, 0x423 etc...};

但为此,我的 Python 代码中需要一个分隔符。

Python代码:

with open("../testing.exe", "rb") as f:

with open("asd.txt", "wb") as b:
    while True:
        c = f.read(1)
        if not c:
            break
        b.write("{}".format(c).encode("ascii")) # Or HEX

一般来说,我只想将二进制文件存储在 C++ 变量中,它是否可读并不重要,我只是希望最终能够将它写入二进制文件,而无需在 C++ 端进行任何类型的读取。就好像你已经在 C++ 中的一个变量上有了一些二进制数据,你只需将它写到一个 exe 文件中,它就可以工作了。问题是我不知道什么是最简单的方法和最好的方法。性能并不那么重要,但如果您有更好的解决方案,我总是很乐意倾听!

标签: pythonc++binaryhexascii

解决方案


答案是C 数组的 python 字节(如 xxd 程序)

从 binascii 导入 hexlify

使用 open("../testing.exe", "rb") 作为 f:

with open("header.hpp", "w") as b:
    arr = []
    while True:
        c = f.read(1)
        if not c:
            b.write("unsigned char buff[] = {{{}}};".format(b", ".join(arr)))
            break
        arr.append(b"0x" + hexlify(c))

这将产生所需的头文件,然后您可以将缓冲区写入具有二进制模式的文件,即 C/C++ 上的“wb”。请注意,此代码会将数组包装在 b' ' 中,不要忘记在使用之前将其删除。此代码将生成一个十六进制代码数组,每个代码等于所需二进制文件的一个字节。


推荐阅读