数据校验,错误一大堆,求高手改正
程序代码:
#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); } } }此程序的目的在于,由用户自定义输入数据,让后按要求可以进行各种校验,并保存数据
原来我设计的还可以计算校验,改了现在这模样反而更纠结
数据比较混乱的样子
求高手改正错误,分我不会吝啬的