HEX转BIN源码分析(51系列)
以前写的一个Atmel的S5X的下载程序,其中有支持HEX格式的文件,所以将这个程序贴出来,程序的意思是将输入的HEX文件转换为BIN格式的文件,并存储到文件中,注意不支持64K的扩展模式。
int CFlashP51App::HexToBin(CString hexfile, CString binfile)
{
CFile fhex, fbin;
CString pBuffer;
BYTE len, len1, len2, len_at_max=;
;
;
if(!(fhex.Open(hexfile, CFile::modeRead, NULL))) //// 打开文件
;
if(!(fbin.Open(binfile, CFile::modeCreate|CFile::modeWrite, NULL)))
;
char *buffer = new char [fhex.GetLength()]; //// 分配内存
fhex.Read(buffer, fhex.GetLength());
pBuffer = buffer;
nEnd = pBuffer.Find(":00000001"); //// 以此来判断文件格式是否为HEX
) //先判断文件结尾处
{
// AfxMessageBox("*.Hex文件转换失败(未找到\":00000001\"记录)!");
;
}
n = ;
while(n < nEnd) // 首先得到bin文件的长度
{
if(buffer[n] == ':')
{
CharToByte(&buffer[n+], &len);
CharToByte(&buffer[n+], &len1);
CharToByte(&buffer[n+], &len2);
start_addr = (len1<<) + len2; // 起始地址
/*
* 有的HEX文件中间会有"空洞",只靠计算前面每一行数据的大小
* 可能会出现错误,因此得到最大的地址值和最大地址值这一行的
* 数据大小来得到BIN文件的大小,实际上准确上因该采用此法,前
* 面的方法没有去掉,可以去掉
*
*/
if(start_addr >= start_addr_max)
{
start_addr_max = start_addr;
len_at_max = len;
}
bin_length += len;
n += len*+; // 没有加上回车符号
}
else
n++;
}
start_addr_max += len_at_max;
if(start_addr_max >= bin_length)
bin_length = start_addr_max;
BYTE *bbuf = new BYTE [bin_length]; //// 分配内存
; i<bin_length; i++)
bbuf[i] = 0xff;
n = ;
while(n < nEnd) // 向BIN文件缓冲区写数据
{
if(buffer[n] == ':')
{
CharToByte(&buffer[n+], &len);
CharToByte(&buffer[n+], &len1);
CharToByte(&buffer[n+], &len2);
start_addr = (len1<<) + len2; // 起始地址
; i<len; i++)
{
CharToByte(&buffer[n++i*], &len1);
bbuf[start_addr+i] = len1;
}
n += len*+; // 没有加上回车符号
}
else
n++;
}
fbin.Write(bbuf, bin_length);
fhex.Close();
fbin.Close();
delete [] buffer;
delete [] bbuf;
return bin_length;
}
BOOL CFlashP51App::CharToByte(char *pChar, BYTE *pByte)
{
char h,l;
h = pChar[]; //高4位
l = pChar[]; //低4位
')
l = l - ';
else if(l>='a' && l<='f')
l = l - 'a' + 0xa;
else if(l>='A' && l<='F')
l = l - 'A' + 0xa;
else
return FALSE;
')
h = h - ';
else if(h>='a' && h<='f')
h = h - 'a' + 0xa;
else if(h>='A' &&h <='F')
h = h - 'A' + 0xa;
else
return FALSE;
*pByte = (BYTE)h* + l;
return TRUE;
}
HEX转BIN源码分析(51系列)的更多相关文章
- Kafka源码分析系列-目录(收藏不迷路)
持续更新中,敬请关注! 目录 <Kafka源码分析>系列文章计划按"数据传递"的顺序写作,即:先分析生产者,其次分析Server端的数据处理,然后分析消费者,最后再补充 ...
- Docker源码分析(八):Docker Container网络(下)
1.Docker Client配置容器网络模式 Docker目前支持4种网络模式,分别是bridge.host.container.none,Docker开发者可以根据自己的需求来确定最适合自己应用场 ...
- 【OpenCV】SIFT原理与源码分析:方向赋值
<SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一篇<关键点搜索与定位>,我们已经找到 ...
- 【OpenCV】SIFT原理与源码分析:关键点搜索与定位
<SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一步<DoG尺度空间构造>,我们得到了 ...
- Shiro 源码分析
http://my.oschina.net/huangyong/blog/215153 Shiro 是一个非常优秀的开源项目,源码非常值得学习与研究. 我想尝试做一次 不一样 的源码分析:源码分析不再 ...
- UiAutomator源码分析之获取控件信息
根据上一篇文章<UiAutomator源码分析之注入事件>开始时提到的计划,这一篇文章我们要分析的是第二点: 如何获取控件信息 我们在测试脚本中初始化一个UiObject的时候通常是像以下 ...
- Appium Android Bootstrap源码分析之控件AndroidElement
通过上一篇文章<Appium Android Bootstrap源码分析之简介>我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一个初步的 ...
- 【MyBatis源码分析】select源码分析及小结
示例代码 之前的文章说过,对于MyBatis来说insert.update.delete是一组的,因为对于MyBatis来说它们都是update:select是一组的,因为对于MyBatis来说它就是 ...
- MyBatis源码分析之环境准备篇
前言 之前一段时间写了[Spring源码分析]系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章[MyBatis源码分析],在[MyBatis源码分析]文章的 ...
随机推荐
- leetcode_Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- VC 隐藏托盘图标
苦苦寻找的隐藏托盘图标的方法,今天终于搞定,献给大家! #include <atlbase.h> #include <atlconv.h> #include <CommC ...
- BZOJ2393: Cirno的完美算数教室
2393: Cirno的完美算数教室 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 138 Solved: 83[Submit][Status] D ...
- python部落刷题宝学到的内置函数
最近加入了python部落,感觉里面的刷题宝很有意思,玩了一下,知道了许多以前并不清楚的内置函数,然后感觉到快要记不住了,所以开始陈列一下 1.divmod(a,b):取a除以b的商和余数,功效等价于 ...
- adb网络调试
对Android比较熟悉的开发人员,对adb通过USB(USB连接Android设备)调试Android设备应该不会陌生,因为大部分资料都是这样做的.但是假如你的Android设备没有USB口,只有网 ...
- Head First Html 与 Css 截图
1.认识HTML web语言 2.深入了解超文本 HTML中的"HT" 3. 构建模块 web页面建设 4. 连接起来 5. 认识媒体,为页面添加图像 6. 严肃的HTML标准及其 ...
- [原创作品]web网页中的锚点
因为近来在从事web前端开发的工作,所以写的文章也都是关于web这一块.以后将分享算法和web高级编程的内容,很多公司的web前端不够重视,以为是很low-level,给的待遇也很一般,其实,这都是很 ...
- iOS中的界面多选功能--(UICollectionView)
文/Jacob_Pan(简书作者)原文链接:http://www.jianshu.com/p/9d28ebd0f5a2著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 最近做项目接触了一 ...
- 利用扩展双屏技术及Chrome浏览器,高速剖析优秀网页Div及CSS构成,并高效实现原型创作
作为一个Web前台设计人员,应该充分利用可利用的硬件条件及专业的软件工具,迅速进入到高效氛围其中.实践中,我们能够利用扩展桌面双屏技术及Chrome浏览器高速剖析优秀网页Div及CSS构成,并高速实现 ...
- Java Builder模式 体验(二)
在上篇文章中,对Java Builder模式的使用体验主要是从Builder对构造器改造方面的优秀特性来说的,感觉并没有从Java Builder模式本身的功能和作用去写,因此决定再从Build ...