Python 将二进制文件转为数组

前由

调试外设驱动时,某些外设需要固件而厂商给出的固件是二进制 BIN 文件。对于这些二进制 BIN 文件,一般以文件的形式存放于flash分区,使用的时候通过文件操作读取。上面的方法优点和缺点并存:优点是可以存储稍微大一点的文件;缺点是文件操作麻烦且可能会因为文件系统不稳定导致文件丢失。如果固件 BIN 比较小的话,除开以上存文件系统的方法,另外一种方式即是将 BIN 文件导出为数组,存放在代码中。以下即是使用 Python 来将一个BIN文件转换为数组的代码,转换后可以使用Linux的命令 hex2dump 来验证(注意大小端)。

代码

#!/bin/python
import os
import sys

list_data = []

def read_data_from_binary_file(filename, list_data):
    f = open(filename, 'rb')
    f.seek(0, 0)
    while True:
        t_byte = f.read(1)
        if len(t_byte) == 0:
            break
        else:
            list_data.append("0x%.2X" % ord(t_byte))

def write_data_to_text_file(filename, list_data,data_num_per_line):
    data_num_per_line_int = int(data_num_per_line)
    f_output = open(filename, 'w+')
    f_output.write('const unsigned char test_img[] = \n')
    f_output.write('{\n ')
    if ((data_num_per_line_int <= 0) or data_num_per_line_int > len(list_data)):
        data_num_per_line_int = 16
        print('data_num_per_line out of range,use default value\n')
    for i in range(0,len(list_data)):
        if ( (i != 0) and(i % data_num_per_line_int == 0)):
            f_output.write('\n ')
            f_output.write(list_data[i]+', ')
        elif (i + 1) == len(list_data):
            f_output.write(list_data[i])
        else:
            f_output.write(list_data[i]+', ')
    f_output.write('\n};')
    f_output.close()

def main():
    input_f = input("Please input source bin file_name:")
    output_f = input("Please input dest C file name:")
    data_num_per_line = input("Please input a num whitch indicates how many data for one line:")
    read_data_from_binary_file(input_f, list_data)
    write_data_to_text_file(output_f, list_data,data_num_per_line )

if __name__ == "__main__":
    sys.exit(main())

本部分代码参考、转抄自 用Python将二进制文件转化为数组并以文件形式存储 ,在此基础上,修改了部分内容,以便适配 python-3 的编译。使用时,需要输入以下三个参数:源文件名、生成文件名以及16进制数组每一行有多少个数据。

后记

转自: 用Python将二进制文件转化为数组并以文件形式存储

    原文作者:素炒瓢儿白
    原文地址: https://blog.csdn.net/q1075355798/article/details/107535588
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞