回复:(卧龙孔明)程序无法编译通过,因为你没有加#in...
											这个我没有复制完全,真个完整的是:
#include<ctype.h>
#include<stdio.h>
#include<string.h>
#define DataN   16   /* 假定数据区间的最长长度 */
/*定义Intel HEX记录的结构*/
struct {
unsigned char ll ;   /*长度 */
    unsigned int aaaa ;  /*地址 */
    unsigned char tt ;    /*记录类型,0-数据,1-终止*/
    unsigned char dd[DataN];      /* 数据 ??*/
    unsigned char cc ;      /*校验和*/
} IntelHEX ;
bool AnalyseHEX(char hex[])
{
    unsigned char i ;
    unsigned char j ;
    unsigned char t ;
    unsigned char n ;
    unsigned char cc ;
    unsigned int x ;
   
if(hex[0]!=':') return 1 ;    /*检查冒号*/
    t=(toint(hex[1])<<4)+toint(hex[2]); /*检查长度*/
    if(t>DataN) return 1 ;  
    n=2*t+12 ;  /* 字符串总的长度,不包括'\0',却为何要 12 呢?? */
if(n!=strlen(hex)) return 1 ;
    IntelHEX.ll=t ; /* 有效数字个数 */
    cc=t ;   /* 对所有值求和以便求补 */
    
    t=(toint(hex[3])<<4)+toint(hex[4]); /*提取地址*/
    cc+=t ;
    x=(unsigned int)t ;/*提取地址高位*/
    x<<=8 ;            /* 高位加权 */
    t=(toint(hex[5])<<4)+toint(hex[6]);
    cc+=t ;          
    x+=(unsigned int)t ;/*提取地址低位*/
    IntelHEX.aaaa=x ;  /* 地址 */
    
    t=(toint(hex[7])<<4)+toint(hex[8]); /*提取记录类型*/
    if((t==0)||(t==1)) { /* 非扩展地址 */
        cc+=t ;
        IntelHEX.tt=t ;
    }
    else {
        return 1 ; /* 怎么不允许地址扩展?? */ 
    }
    /*提取数据*/
    i=9 ; /* 有效数据的开始位置 */
    if(t==0) /* 有效数据时: */
    {
        j=0 ;
        n=IntelHEX.ll ;
        do  {
            t=(toint(hex[i++])<<4);
            t+=toint(hex[i++]);
            cc+=t ;
            IntelHEX.dd[j++]=t ;
        } while(--n!=0);
    }
    /*提取校验和*/
     t=(toint(hex[i++])<<4); t+=toint(hex[i++]); /* 校验和数值 */
    cc+=t ;
    IntelHEX.dd[j++]=t ;
    /*检查校验*/
    if(cc==0) return 0 ;
    else  return 1 ;
}
#define M   (DataN+13)  /* 假定Intel HEX 文件中最长行的长度 */
#include<ctype.h>
#include<stdlib.h>
int main(void)
{
FILE *fp_in;
char *phex=(char *)malloc(sizeof(char)*M);
    if((fp_in=fopen("C:\\cms.hex","r"))==NULL)        /*文件名不区分大小写*/
    {
        perror("Error Open");                          /*系统错误信息*/
    }
fseek(fp_in, 0, SEEK_SET); 
while(!feof(fp_in))                                /*直到文件结束*/
    {
  fgets(phex,M,fp_in);  /* 读取一行字符 */ 
  if(AnalyseHEX(phex)) 
  {  printf("%d\t%s\n",AnalyseHEX(phex),phex);
    printf("the error file form !!\n"); 
    free(phex);
    fclose(fp_in);
    return 0 ;
  } printf("%d\t%s\n",AnalyseHEX(phex),phex);
    }
printf("the exact file form !!\n"); /* 正确的intel hex文件 */ 
fclose(fp_in);
free(phex);
return 0 ;
}
本来是希望用来判定intel hex文件的检验码是不是正确的!
附件中文件是一个 intel hex格式的文件 例子
	
		
			
		
	
[此贴子已经被作者于2007-8-18 9:51:57编辑过]