HEX转BIN 
- bin_data = bytearray()  # 存储BIN文件数据
 
 - current_address = 0     # 当前地址
 
  
- for line in hex_file:
 
 -     if line[0] != ":":  # 忽略非HEX记录
 
 -         continue
 
 -     length = int(line[1:3], 16)
 
 -     address = int(line[3:7], 16)
 
 -     record_type = int(line[7:9], 16)
 
 -     data = line[9:9+2*length]
 
 -     checksum = int(line[9+2*length:9+2*length+2], 16)
 
  
-     if record_type == 0x00:  # 数据记录
 
 -         bin_data[address:address+length] = bytes.fromhex(data)
 
 -     elif record_type == 0x04:  # 扩展线性地址记录
 
 -         current_address = int(data, 16) << 16
 
 -     elif record_type == 0x01:  # 文件结束记录
 
 -         break
 
  
 
 
BIN转HEX 
- def bin_to_hex(bin_data, start_address=0x0000):
 
 -     hex_lines = []
 
 -     length = 16  # 每行16字节
 
 -     for i in range(0, len(bin_data), length):
 
 -         data = bin_data[i:i+length]
 
 -         address = start_address + i
 
 -         record = f":{length:02X}{address:04X}00{data.hex().upper()}"
 
 -         checksum = calculate_checksum(record)
 
 -         hex_lines.append(f"{record}{checksum:02X}")
 
 -     hex_lines.append(":00000001FF")  # 文件结束记录
 
 -     return "\n".join(hex_lines)
 
  
 
HEX文件包含地址、数据和校验信息,适合存储复杂的内存布局。 
 
BIN文件是纯二进制数据,适合直接烧录到单片机的Flash中。 
 
转换的核心是提取HEX文件中的数据并按地址写入BIN文件,或者为BIN文件添加地址信息并生成HEX文件。 
 
  |