python - 变量中的 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 文件中,它就可以工作了。问题是我不知道什么是最简单的方法和最好的方法。性能并不那么重要,但如果您有更好的解决方案,我总是很乐意倾听!
解决方案
从 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' ' 中,不要忘记在使用之前将其删除。此代码将生成一个十六进制代码数组,每个代码等于所需二进制文件的一个字节。
推荐阅读
- spring - 使用 Spring 进行 LDAP 身份验证 - 获取 PartialResultException
- groovy - 过去 12 个月中最近一月、二月、十二月的 SOAP UI 日期变量
- amazon-efs - 如何找到挂载到特定 EFS 的所有 EC2 实例
- ios - 隐藏 WKWebView 时如何将黑屏更改为图像
- c# - Crystal 子报表提示登录
- java - 调用 EntityManager.persist() 时的未知实体
- python - Pandas - 通过选择多列对组中多列的两个数组求和
- hangfire - 如何限制 Hangfire Server 中允许的方法
- firebase - Firebase 的(用户选择的)每个项目的 Cloud Firestore 位置不可更改的政策将来可能会改变吗?
- python - 在 Databricks Python 脚本中使用 URL 时的 CERTIFICATE_VERIFY_FAILED 和 SSLV3_ALERT_HANDSHAKE_FAILURE