2024年1月18日发(作者:)
关于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=ne();
if(sLine==null){
}
//注意,字符串长度上:占了1位,在截取时要算进去
if(ing(0, 1).equals(":")){
}
//00000001为文件的结束描述
if(ing(1,9).equals("00000001")){
}
//数据类型在第7和8位上(00为数据记录,01文件结束记录,02地址延伸
//03地址开始部分,04线性地址记录,05开始线性地址记录
//转为bin文件只取数据记录
if(ing(7, 9).equals("00")){
}
//数据从第9位开始到倒数第3位。后两位是数据校验
(ing(9,()-2));
break;
break;
}
mot文件跟hex文件基本一样,mot文件不同的是数据描述有三种类型,三种类型的最大区别就是地址占用的长度不一致。这样在取数据部分的时候就要判断数据描述类型。根据类型取数据。mot文件中一行包括
数据类型1字节|数据长度1字节|数据地址(2,3,4)字节不等|数据n字节|校验1字节
mot文件麻烦一点就在数据地址长度不固定。但也是有规律的,规律就在数据类型上。我们只关注数据mot文件行中出了S1,S2,S3是数据类型其它都是描述类型。S1类型数据地址2字节,S2类型数据地址3字节,S3类型数据地址4字节。那么如果是一行S1的类型数据S113106A000EE00338D46AA8000EE004F03030D54C这是一行随意截取的真实数据我们来byte[] filebin=hexStringToBytes(ng());
分析下;S1类型,数据长度13(这是16进制哦),地址106A,数据000EE00338D46AA8000EE004F03030D5,校验4C。地址2字节+数据部分32个字符占16字节+校验1字节=19字节。数据长度13刚好,如果你看不明白去好好看看进制换算。(16进制的13就是10进制的19)。如果看不明白没关系贴段代码去复制吧。
while(true){
}
byte[] filebin=hexStringToBytes(ng());
sLine=ne();
if(sLine==null){
}
//前两位占一字节文件类型描述
//S1地址2字节,长度1字节,加上本身1字节占去4字节,从第9位开始
if(ing(0, 2).equals("S1")){
//数据从第9位开始到倒数第3位。后两位是数据校验
(ing(8, ()-2));
break;
//S2地址3字节,相应数据截取往后退两位开始截取
}else if(ing(0, 2).equals("S2")){
(ing(10, ()-2));
//S2地址4字节,相应数据截取往后再退两位开始截取
}else if(ing(0, 2).equals("S3")){
}
(ing(12, ()-2));
个人觉得hex文件操作相对简单。所以篇幅有点少。代码为真实项目片段,无毒,环保,健康。
发布评论