Python实现hex文件转bin文件

因为IAR工程编译时不能同时生成hex文件和bin文件,如果选择生成bin文件则会删除之前的hex文件,而我们需要同时有hex文件和bin文件,所以自己要写一个工具在编译完成后自动把hex文件转为bin文件。

在网上找到了Python实现的转换脚本,很好用,一个简单的函数。特转载如下,感谢原作者分享,原文地址

————————–         以下为转载            ———————————————————–

import os
import sys
from struct import *
#hex to bin
def hex_bin(hexfile,binfile):    
    fin = open(hexfile)
    fout = open(binfile,'wb')
    result =''
    for hexstr in fin.readlines():
        hexstr = hexstr.strip()
        size = int(hexstr[1:3],16)
        if int(hexstr[7:9],16) != 0:
            continue    
        #end if    
        for h in range( 0, size):
            b = int(hexstr[9+h*2:9+h*2+2],16)
            result += pack('B',b)
        #end if
        fout.write(result)        
        result=''
    #end for
    fin.close()
    fout.close()

# bin to hex
def bin_hex(binfile,hexfile):
    fbin = open(binfile,'rb')
    fhex = open(hexfile,'w')
    offset = 0
    seg_addr = 0
    while 1:
        checksum=0 
        result = ':'
        bindata = fbin.read(0x10)
        if len(bindata) == 0 :
            break
        #end if
        result += '%02X' % len(bindata)
        result += '%04X' % offset
        result += '00'
        checksum = len(bindata)
        checksum += (offset & 0xff) + (offset >> 8)

        for i in range(0,len(bindata)):
            byte = unpack('B',bindata[i])
            result+='%02X' % byte
            checksum += byte[0]
        #end for    
        checksum = 0x01 + ~checksum
        checksum = checksum & 0xff
        result += '%02X/n' % checksum 
        fhex.write(result)
        offset += len(bindata)
        if offset == 0x10000:
            offset = 0            
            seg_addr += 1
            result = ':02000004'
            result += '%02X%02X' % ((seg_addr>>8) & 0xff,seg_addr & 0xff)
            checksum = 0x02 + 0x04 + (seg_addr>>8) + seg_addr & 0xff            
            checksum = -checksum
            result+='%02X' % (checksum & 0xff)
            result += '/n'
            fhex.write(result)
        #end if    
        if len(bindata) < 0x10:
            break
        #end if    
    #end while    
    fhex.write(':00000001FF')
    fbin.close()
    fhex.close()
#end for

if len(sys.argv) != 4 or (sys.argv[1] != '-h' and sys.argv[1] != '-b'):
    print 'usage:'
    print 'convert binary format to hexadecimal format: '
    print ' hexbin.py -h binfile hexfile'
    print 'convert hexadecimal format to binary format:'
    print ' hexbin.py -b hexfile binfile'
    exit(0)

if sys.argv[1] == '-h':
    bin_hex(sys.argv[2],sys.argv[3])
else:
    hex_bin(sys.argv[2],sys.argv[3])
分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/python%e5%ae%9e%e7%8e%b0hex%e6%96%87%e4%bb%b6%e8%bd%acbin%e6%96%87%e4%bb%b6/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论?

1 条评论。

  1. 我是新手,想把hex文件转换成bin文件,请问这个要怎么使用?

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名