hex文件的格式说明:https://blog.csdn.net/weixin_39752827/article/details/81477686
代码如下:
proc hextobin {args} {
#读取文件
set fileName "H:/hexfile.hex"
set fp [open $fileName r];
set data(0) "";
set row 0;
while {[gets $fp dataline] >= 0} {
set data($row) $dataline;
incr row;
}
close $fp;
puts $data(0);
set sum 0;#二进制文件总长度
set index 0;
set outdata "";
#不考虑顺序和地址
while {$index < $row} {
set type [string range $data($index) 7 8];#类型
set len [format %d 0x[string range $data($index) 1 2]];#长度
set dataline [string range $data($index) 9 [expr 9 + $len*2 - 1]];
if {$type == "00"} {
set sum [expr $sum + $len];
for {set i 0} {$i < $len} {incr i} {
set dataByteHex [string range $dataline [expr $i*2] [expr $i*2+1]];
set dataByteDec [format %d 0x$dataByteHex];
set dataByteC [binary format c $dataByteDec];
append outdata $dataByteC;
}
}
incr index;
}
puts $sum;
#生成bin文件
set fileName "h:/bin.bin";
set fp [open $fileName w];
fconfigure $fp -translation binary
puts -nonewline $fp $outdata;
close $fp;
}
待优化:
- 地址乱序处理
知识点:
- hex文件格式
- tcl二进制文件操作