用Python将二进制文件转化为数组并以文件形式存储
最近在学习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 )