1. 程式人生 > >python 讀寫和合並二進制bin文件

python 讀寫和合並二進制bin文件

val size lse 文件合並 pack code lose set demo

在燒錄程序的時候,需要將多個二進制bin文件合成一個,並且要指定數據段地址偏移量,在數據段之間的地址填充默認值0xff。因為不想手動操作,想直接通過make命令就可以生成合並後的bin文件,具體方法是通過在makefile中添加調用python腳本命令來實現bin文件合並操作,沒正經學過腳本語言,python上手最快,就決定用python寫一個腳本,然後添加到makefile中就好了。

python像c一樣操作二進制文件需要用到struct庫。

腳本編寫的大概思想是:

1.根據最後一個文件數據的地址偏移量和最後一個文件的大小來確定合成後文件的最終大小。

2.因為第一個bin文件的偏移量為0,所以創建一個第一個文件的副本,根據數據地址偏移量在文件末尾添加0xff或者其他bin文件數據,所有bin文件添加完後,該副本即為合並後bin文件。

python腳本代碼如下:

import os
import shutil
import struct

bin1_path = demo1.bin
bin2_path = demo2.bin
bin3_path = demo3.bin
bin4_path = demo4.bin
bin_result_path = imagedemo.bin

offset1 = 0x00000000
offset2 = 0x00008000
offset3 = 0x0000a000
offset4 = 0x00100000

shutil.copyfile(bin1_path,bin_result_path)

bin_1 = open(bin1_path,
rb) bin_2 = open(bin2_path,rb) bin_3 = open(bin3_path,rb) bin_4 = open(bin4_path,rb) bin_merge = open(bin_result_path, ab) bin4_size = os.path.getsize(bin4_path) bin_result_size = os.path.getsize(bin_result_path) final_size = 1024*1024*1 + bin4_size offset = bin_result_size value_default = struct.pack(
B, 0xff) while offset < final_size: if offset == offset2: data = bin_2.read() bin_merge.write(data) offset = bin_merge.tell() elif offset == offset3: data = bin_3.read() bin_merge.write(data) offset = bin_merge.tell() elif offset == offset4: data = bin_4.read() bin_merge.write(data) offset = bin_merge.tell() else: bin_merge.write(value_default) offset = bin_merge.tell() bin_1.close() bin_2.close() bin_3.close() bin_4.close() bin_merge.close()

python 讀寫和合並二進制bin文件