原创 [原创]c#的Hex转Bin小程序

2009-1-9 09:25 9394 19 24 分类: 软件与OS

最近在搞AVR的bootloader,程序已经写好了,参考网上的代码用的是XMODEM协议用XP自带的超级终端。问题是xmodem支持bin格式的文件,一般用编译器生成的是hex文件不用直接使用,需要转换一下。虽然通过修改GCC的makefile文件可以实现生成bin文件,但是考虑到以后编写bootloader上位机程序要同时支持hex和bin,所以用就c#练习写一个转换的小程序,c#也是才开是用不是很熟练,不过到是很方便。


程序界面截图:


8fcb241e-047a-4c8a-8aa9-88f008faedee.jpg


编写环境:


b3fd9185-ea21-4ea3-b021-168e281d5bc2.jpg


源码:


https://static.assets-stash.eet-china.com/album/old-resources/2009/1/9/5b6c0903-512c-4650-9c55-5592071a8344.rar


顺便再介绍一下Hex 和bin文件格式的区别:


Hex文件,这里指的是Intel标准的十六进制文件,也就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示.具体格式介绍如下:
Intel hex 文件格式

Intel hex 文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。
Intel hex 文件全部由可打印的ASCII字符组成,如下例所示:

:2000000012014c75a800e4f508f509780a7a78e4f608dafcd283fcfded240af9a7050dbd81
:2000200000010ced2488ec34ff50edc283e4fcfded240af9e76d7013ed33e43c700d0dbd2a
:2000400000010ced2488ec34ff50e50509e50970020508e50924a8e50834fd50aee4f50874

Intel hex 由一条或多条记录组成,每条记录都由一个冒号“:”打头,其格式如下:

:CCAAAARR...ZZ

其中:
CC
本条记录中的数据字节数

AAAA
本条记录中的数据在存储区中的起始地址

RR
记录类型:
00 数据记录 (data record)
01 结束记录 (end record)
02 段记录 (paragraph record)
03 转移地址记录 (transfer address record)

...
数据域

ZZ
数据域校验和

Intel hex文件记录中的数字都是16进制格式,两个16进制数字代表一个字节。CC域是数据域中的实际字节数,地址、记录类型和校验和域没有计算在内。校验和是取记录中从数据字节计数域(CC)到数据域(...)最后一个字节的所有字节总和的2的补码。

 
而Bin文件是最纯粹的二进制机器代码,没有格式,或者说是"顺序格式"按assembly code顺序翻译成binary machine code.由于分析出来Hex文件中的数据域ASCII码表示的十六进制与二进制一一对应,而且我公司DSP又是16位的,以一个word为最小单位,所以四个十六进制ASCII码代表一条机器指令单位或者地址.借于上面分析,编写了工具代码.大体原理是用fscanf函数在每行的数据域读入四个ASCII码,以短整形(short int 16bit)形式储存,在把这个短整形变量顺序fwrite到文件流中去即可。

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户1130341 2010-10-8 16:29

转化出来的都是0KB 不能用啊

用户185910 2009-12-8 10:48

谢谢,正需要

用户164978 2009-11-18 16:11

非常感谢,参考一下。

用户6646 2009-6-24 21:19

谢谢!

用户551388 2009-1-9 19:55

let me see
相关推荐阅读
用户1079511 2009-07-10 16:08
Mega16读取SD卡内的FAT16文件
最近一直在学习FAT文件系统,在网络上找了一些资料加上参考别人写的程序,现在已经可以读取SD/MMC卡指定的文件,有些东西自己也不是很懂,回头还得慢慢研究。程序比较简单,就是读取SD卡的基本信息和初始...
用户1079511 2009-04-14 08:38
[原创]AVR M16热敏电阻测温LCM12864显示
https://static.assets-stash.eet-china.com/album/old-resources/2009/4/14/d085d878-6d8f-4245-acdb-cf44...
用户1079511 2009-04-08 11:34
Mega16 Bootloader+PC端上位机
AVR的Bootloader功能很方便产品的在线升级,以前参考网上的资料写过下位机的程序,标准的XMODEM协议,用超级终端来升级程序。最近在学习C#,所以用C#写个简单的上位机软件,配合以前的boo...
用户1079511 2009-01-22 16:15
Mega16热敏电阻测温上位机曲线显示
最近在一直学习用C#做上位机,把以前的做的m16热敏电阻测温的程序翻出来,稍加修改通过串口发给PC;PC端用c#2008写程序,接收数据后通过ZedGraph绘图控件实时显示出曲线图。ZedGraph...
用户1079511 2008-12-31 10:42
[学习]用595驱动LED实现灰度调节
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />前一段时间在ouravr论坛里闲逛的...
EE直播间
更多
我要评论
5
19
关闭 站长推荐上一条 /3 下一条