关于hex格式和mot格式转bin格式的总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于hex格式和mot格式转bin格式的总结
本文介绍用java转换hex和mot的方式
Hex格式文件是Intel产品主要格式文件,mot格式文件是摩托罗拉公司推出的格式文件。从解析方式上不能一概而论。倒是文件结构大体一致。
Bin文件是数据文件,一般来说从hex或mot转成的bin文件都比原文件小。因为hex 文件和mot文件都有很多描述文件和数据文件,而bin文件只要数据不需要描述。
Hex文件中的:标记了一行的开始。其后的每两个字符(不区分字母或数字)都看作一个字节。其中一行中包括
:|数据长度1字节|数据地址2字节|数据类型1字节|数据n字节|校验1字节
可以看出除了数据字节不确定其它都是固定的。而且数据类型中只有00类型的是数据记录,所以每一行中判断数据类型除了是00的其它的都可以不看。我们要取数据字节就要刨除:|数据长度|数据地址|数据类型|校验,5个字节和1个:共11个字符之外其它都是数据了。
while(true){
sLine=br.readLine();
if(sLine==null){
break;
}
//注意,字符串长度上:占了1位,在截取时要算进去
if(sLine.substring(0, 1).equals(":")){
//00000001为文件的结束描述
if(sLine.substring(1,9).equals("00000001")){
break;
}
//数据类型在第7和8位上(00为数据记录,01文件结束记录,02地址延伸
//03地址开始部分,04线性地址记录,05开始线性地址记录
//转为bin文件只取数据记录
if(sLine.substring(7, 9).equals("00")){
//数据从第9位开始到倒数第3位。后两位是数据校验
srtb.append(sLine.substring(9,sLine.length()-2));
}
}
}
byte[] filebin=hexStringToBytes(srtb.toString());mot文件跟hex文件基本一样,mot文件不同的是数据描述有三种类型,三种类型的最大区别就是地址占用的长度不一致。这样在取数据部分的时候就要判断数据描述类型。根据类型取数据。mot文件中一行包括
数据类型1字节|数据长度1字节|数据地址(2,3,4)字节不等|数据n字节|校验1字节mot文件麻烦一点就在数据地址长度不固定。但也是有规律的,规律就在数据类型上。我们只关注数据mot文件行中出了S1,S2,S3是数据类型其它都是描述类型。S1类型数据地址2字节,S2类型数据地址3字节,S3类型数据地址4字节。那么如果是一行S1的类型数据S113106A000EE00338D46AA8000EE004F03030D54C这是一行随意截取的真实数据我们来
分析下;S1类型,数据长度13(这是16进制哦),地址106A,数据000EE00338D46AA8000EE004F03030D5,校验4C。地址2字节+数据部分32个字符占16字节+校验1字节=19字节。数据长度13刚好,如果你看不明白去好好看看进制换算。(16进制的13就是10进制的19)。如果看不明白没关系贴段代码去复制吧。
while(true){
sLine=br.readLine();
if(sLine==null){
break;
}
//前两位占一字节文件类型描述
//S1地址2字节,长度1字节,加上本身1字节占去4字节,从第9位开始
if(sLine.substring(0, 2).equals("S1")){
//数据从第9位开始到倒数第3位。后两位是数据校验
srtb.append(sLine.substring(8, sLine.length()-2));
//S2地址3字节,相应数据截取往后退两位开始截取
}else if(sLine.substring(0, 2).equals("S2")){
srtb.append(sLine.substring(10, sLine.length()-2));
//S2地址4字节,相应数据截取往后再退两位开始截取
}else if(sLine.substring(0, 2).equals("S3")){
srtb.append(sLine.substring(12, sLine.length()-2));
}
}
byte[] filebin=hexStringToBytes(srtb.toString());
个人觉得hex文件操作相对简单。所以篇幅有点少。代码为真实项目片段,无毒,环保,健康。