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

时间:2022-08-06 20:55:27

最近在学习Python,发现Python语言非常适合文件的批处理操作。本文将介绍一下用Python如何实现将一个二进制bin文件转化为一个常量数组的.c文件存储起来。这为我们在一些没有文件系统不能调用fopen、fread之类的工程中提供了便利,我们可以以常量数组的形式去访问这些常量数据;另外在算法性能优化时,也可以利用此程序将一些复杂浮点运算提前变成表格,以查表的形式来提高运算效率。当然,转化为常量数组可能会比较耗费内存。闲话少说,代码如下:

 1 import os
 2 
 3 def read_data_from_binary_file(filename, list_data):
 4     f = open(filename, 'rb')
 5     f.seek(0, 0)
 6     while True:
 7         t_byte = f.read(1)
 8         if len(t_byte) == 0:
 9             break
10         else:
11             list_data.append("0x%.2X" % ord(t_byte))
12 
13 def write_data_to_text_file(filename, list_data,data_num_per_line):
14     f_output = open(filename, 'w+')
15     f_output.write('#include<sys/type.h> \n')
16     f_output.write('const unsigned char test_img[] = \n')
17     f_output.write('{\n    ')
18     if ((data_num_per_line <= 0) or data_num_per_line > len(list_data)):
19         data_num_per_line = 16
20         print('data_num_per_line out of range,use default value\n')
21     for i in range(0,len(list_data)):
22         if ( (i != 0) and(i % data_num_per_line == 0)):
23             f_output.write('\n    ')
24             f_output.write(list_data[i]+', ')
25         elif (i + 1) == len(list_data):
26             f_output.write(list_data[i])
27         else:
28             f_output.write(list_data[i]+', ')    
29     f_output.write('\n};')
30     f_output.close()
31 
32 list_data = []
33 input_f = raw_input("Please input source bin file_name:")
34 output_f = raw_input("Please input dest C file name:")
35 data_num_per_line = input("Please input a num whitch indicates how many data for one line:")
36 read_data_from_binary_file(input_f, list_data)
37 write_data_to_text_file(output_f, list_data,data_num_per_line )