我写的HEX转BIN的源码

 1 #include "stdio.h"
 2 #include "string.h"
 3 
 4 unsigned char ChartoByte(char c)
 5 {
 6     if(c-'a'>=0 ) return(c-'a'+10);
 7     else if(c-'A'>=0 ) return(c-'A'+10);
 8     else return(c-'0');
 9 }
10 
11 unsigned char Char2toByte(char* s)
12 {
13     return (ChartoByte(*s)*16+ChartoByte(*(s+1)));
14 }
15 
16 
17 int main(int argc,char *argv[])
18 {
19     FILE *fp_hex = NULL;
20     FILE *fp_bin = NULL;
21     char buff[64] = "" ;
22 
23     unsigned char length = 0;
24     unsigned short offset = 0;  //0~65535
25     unsigned char type = 0;
26     unsigned char checksum = 0;
27     unsigned char i = 0;
28 
29     if(argc != 2) return -1;
30 
31     printf("Input file: %s\n",argv[1]);
32 
33     if((fp_hex=fopen(argv[1],"r"))==NULL)
34     {
35         printf("File open error!!!\n");
36         return -1;
37     }
38 
39     i=strlen(argv[1]);
40     argv[1][i-1]='n';
41     argv[1][i-2]='i';
42     argv[1][i-3]='b';
43     printf("Output file: %s\n",argv[1]);
44 
45     if((fp_bin=fopen(argv[1],"wb"))==NULL)
46     {
47         printf("File creat error!!!\n");
48         return -1;
49     }
50 
51     while(1)
52     {
53         fgets(buff,64,fp_hex);
54 
55         if(feof(fp_hex)) break; //文件结束
56         else if(buff[0] != ':') continue; //无效行
57         else if( strcmp(buff,":00000001FF\n") == 0  ) break; //结束行
58         else
59         {
60             length=Char2toByte(&buff[1]);
61             offset=Char2toByte(&buff[3])*256+Char2toByte(&buff[5]);
62             type=Char2toByte(&buff[7]);
63             if(type==0)
64             {
65                 fseek(fp_bin,offset,0);
66                 for(i=0; i<length; i++)
67                     fputc(Char2toByte(&buff[9+2*i]), fp_bin);
68             }
69 
70             printf("%s",buff);
71         }
72     }
73 
74 
75 
76     return(0);
77 }
posted @ 2012-08-09 16:00  sky1991  阅读(2386)  评论(0编辑  收藏  举报