From 807a79f19cf8d0a7b60d457bbf06400e9bc17cb2 Mon Sep 17 00:00:00 2001 From: zhji Date: Thu, 15 Aug 2024 15:57:53 +0800 Subject: [PATCH] [feat] add binary_to_c_array --- python/binary_to_c_array/binary_to_c_array.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 python/binary_to_c_array/binary_to_c_array.py diff --git a/python/binary_to_c_array/binary_to_c_array.py b/python/binary_to_c_array/binary_to_c_array.py new file mode 100644 index 0000000..335760c --- /dev/null +++ b/python/binary_to_c_array/binary_to_c_array.py @@ -0,0 +1,48 @@ +import sys + +def binary_to_c_array(binary_file_path, c_array_name, output_c_file): + # 读取二进制文件 + with open(binary_file_path, "rb") as file: + binary_data = file.read() + + # 获取数组长度 + array_length = len(binary_data) + + # 初始化C数组字符串 + c_array = "const unsigned char " + c_array_name + "[" + str(array_length) + "] = {\n " + + # 用于记录当前的偏移地址 + offset = 0 + + # 将二进制数据转换为C数组格式 + for i, byte in enumerate(binary_data): + # 每16个字节换行 + if i % 16 == 0 and i > 0: + c_array += "/* Offset: {:#08x} */\n ".format(offset) + offset += 16 + c_array += "0x{:02X}, ".format(byte) + c_array += "/* Offset: {:#08x} */\n".format(offset) + + # 去掉最后一个逗号和空格 + # c_array = c_array.rstrip(", ") + + # 结束数组定义 + c_array += "};\n" + + # 写入到C文件 + with open(output_c_file, "w") as c_file: + c_file.write(c_array) + +# 检查命令行参数数量 +if len(sys.argv) != 4: + print("Usage: python script.py ") + sys.exit(1) + +# 从命令行参数获取输入 +binary_file_path = sys.argv[1] +c_array_name = sys.argv[2] +output_c_file = sys.argv[3] + +# 转换二进制文件并保存为C数组 +binary_to_c_array(binary_file_path, c_array_name, output_c_file) +print(f"C array has been written to {output_c_file}") \ No newline at end of file