Hex文件转换为Bin文件

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机程序的可执行文件有的是Hex格式,有的是Bin文件格式。有时需要将Hex文件转换为Bin文件(如在线升级时)。本文描述了一种在QtCreator环境下将Hex文件转换为Bin文件的一种方法,仅供参考。
Hex文件是以记录的形式记录每一块数据,每条记录包含了地址和数据,以ASCII字符形式保存。基本格式如下
"../df60.bin",tr("Document(*.bin"));
QFile outFile(binFileName);
if(!outFile.open(QFile::ReadWrite ))
{
return;
}
QDataStream out(&outFile);
while(!in.atEnd())
Hex转Bin文件的原理:从Hex文件中提取数据记录(RECTYP为0),其它舍弃。
//ASCII转十六进制函数
char ASCII_TO_HEX(char asc)
{
char chRet;
if('0' <= asc && asc<='9' )
{
chRet = asc - '0';
}
else if('a' <= asc && asc<='f')
if(-1 == out.writeRawData(&dataByte,1))
{
qDebug()<<"Error: fail to write bin file";
}
i += 2;
}
ui->textBrowser_2->insertPlainText(newLine+"\n");
}Байду номын сангаас
}
outFile.close();
RECORDMARK:每条记录的起始标记,ASCII字符为‘:’,即0x3A
LOADRECLEN:表示数据的长度
OFFSET:该条记录的偏移地址
RECTYP:该条记录的类型
关于详细的Hex文件的解析,请参考Hexfrmt.pdf文件
Bin文件以二进制的形式保存着数据,该数据可直接存储在Flash中。
file.close();
}
}
{
line = in.readLine();
QByteArray br;
QString newLine;
br.append(line);
if(0x30 == br.at(8)) //Data record
{
char sizeHigh, sizeLow;
sizeHigh = ASCII_TO_HEX(br.at(1));
sizeLow = ASCII_TO_HEX(br.at(2));
int size = (sizeHigh<<4) | sizeLow;
int i=0;
while(size--)
{
char dataHigh = ASCII_TO_HEX(br.at(9+i));
char dataLow = ASCII_TO_HEX(br.at(10+i));
if(!hexFileName.isEmpty())
{
QFile file(hexFileName);
if(file.open(QIODevice::ReadOnly))
{
QTextStream in(&file);
QString line;
QString binFileName = QFileDialog::getSaveFileName(this,tr("Binary File Name"),
char dataByte = (dataHigh<<4) | dataLow;
QString strHex = QString("%1").arg((dataHigh<<4) | dataLow,2,16,QLatin1Char('0'));
newLine += strHex.toUpper()+" ";
{
chRet = asc-'a' + 0xa;
}
else if('A' <= asc && asc<='F')
{
chRet = asc-'A' + 0xA;
}
return chRet;
}
QString hexFileName = QFileDialog::getOpenFileName(this,"Choose hex file","../",tr("Document(*.hex)"));
相关文档
最新文档