数据校验,错误一大堆,求高手改正
程序代码:#include <stdio.h>
#include <stdlib.h>
unsigned char xorTarget;
unsigned char addTarget;
unsigned int orgValue;
unsigned char *pData;
int n;
int i;
struct header//页眉结构体
{
char sav[30];
char SAV[30];
}boy=
{
"xorTarget\taddTarget\torgValue\n",
"你输入的数据如下:\n"
};
unsigned char GetXorValue ( unsigned char* pData, int nSize)//xor校验
{
unsigned char xorTarget = 0;
for ( i = 0; i < nSize; i++ ) xorTarget ^= pData[ i];
return xorTarget;
}
unsigned char GetAddValue ( unsigned char* pData, int nSize)//add校验
{
unsigned int addTarget = 0;
for ( i = 0; i < nSize; i++ )
addTarget = ( addTarget + pData [ i] ) &0xff;
return ( unsigned char) addTarget;
}
unsigned int GetCRCValue( unsigned char* pData, int nSize)//crc校验
{
int j;
unsigned int orgValue = 0xffff , crcConst = 0xa001;
for ( i = 0; i< nSize; i++ )
{
orgValue ^= ( unsigned int) pData[ i+ 1];
for ( j = 0; j<= 7; j++ )
{
if ( 1 == ( orgValue& 1) )
{
orgValue >>= 1;
orgValue ^= crcConst;
}
else
orgValue >>= 1;
}
}
return orgValue;
}
void save()//数据保存
{
FILE *fp;
char file[50];
int flag=0;
printf("请输入要保存的地址:\n");
getchar();
gets(file);
if((fp=fopen(file,"w"))==NULL)
{
printf("\n保存失败\n");
getch();
exit(0);
}
/*fprintf(fp,"%s",boy.SAV);
for(i=0;i<n;i++)
{
fprintf(fp,"%x\t",pData[i]);
flag++;
if(flag==4)
fprintf(fp,"\n");
flag=0;
}
fprintf(fp,"\n");*/
fprintf(fp,"%s",boy.sav);
fprintf(fp,"0x%x\t\t0x%x\t\t%u",xorTarget,addTarget,orgValue);
fclose(fp);
printf("\n数据已保存%s中\n",file);
}
void creat(unsigned char *pData)
{
int n;
printf("\n请输入你要录入的数据个数:\n");
scanf("%d",&n);
printf("\n你要输入%d个数据:\n",n);
pData=(unsigned char *)malloc(n*sizeof(unsigned char));
}
void input(unsigned char *pData)
{
int n;
for(i=0;i<n;i++)
scanf("%x",&pData[i]);
}
void main(void)
{
start:
printf("\t\t\t简单数据校验\n");
printf("1.录入数据\n");
printf("2.异或校验\n");
printf("3.累加和校验\n");
printf("4.循环冗余校验\n");
printf("5.数据保存\n");
printf("6.退出校验\n");
printf("\n请输入你的选择(1~6):");
scanf("%d",&i);
if(i<1||i>6)
{
printf("\n输入错误\n");
goto start;
}
switch(i)
{
case 1:
{
unsigned char *pData;
creat(pData);
input(pData);
printf("\n按任意键返回\n");
getch();
system("CLS");
main();
}
case 2:
{
system("CLS");
//unsigned char *pData1;
//creat(pData1);
//input(pData1);
xorTarget = GetXorValue(pData,7);
printf("异或校验结果:0x%x\n",xorTarget);
//free(pData1);
printf("\n按任意键返回\n");
getch();
system("CLS");
main();
}
case 3:
{
system("CLS");
//unsigned char *pData2;
//creat(pData2);
//input(pData2);
addTarget = GetAddValue(pData,7);
printf("累加和校验结果:0x%x\n",addTarget);
//free(pData2);
printf("\n按任意键返回\n");
getch();
system("CLS");
main();
}
case 4:
{
system("CLS");
//unsigned char *pData3;
//creat(pData3);
//input(pData3);
orgValue = GetCRCValue(pData,7);
printf("循环冗余校验结果:%u\n",orgValue);
//free(pData3);
printf("\n按任意键返回\n");
getch();
system("CLS");
main();
}
case 5:
{
system("CLS");
save();
printf("\n按任意键返回\n");
getch();
system("CLS");
main();
}
case 6:
{
system("CLS");
printf("\n谢谢使用!\n");
exit(0);
}
}
}
此程序的目的在于,由用户自定义输入数据,让后按要求可以进行各种校验,并保存数据原来我设计的还可以计算校验,改了现在这模样反而更纠结
数据比较混乱的样子

求高手改正错误,分我不会吝啬的










