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


在燒錄程序的時候,需要將多個二進制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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM