c程序纠错 求高手帮忙
这个程序是关于校验的问题 相当于计算机网络里面的crc吧 我这个程序检查好几天了 还是不知道问题出在哪里 注:除数是x1,由于它17位,我把它补成32位来进行计算,由于checksum是16位的,所以可能出现余数17位的情况 ,就将余数的最高位加到了最后一位
还有这程序是在linux环境中运行的 int 占得是4个字节
#include <Stdio.h>
#include <String.h>
typedef struct
{
char data[16];
short checksum;
} dataset; /***分组中的16个8位数***/
typedef struct
{
short flag;
dataset data[6];
} ft3frame; /***ft3帧格式****/
short GetCheckSum(char *data1,int num) /**校验码计算**/
{
int i,j,k,x1,x2;
char temp[18];
for(i=0;i<num;i++)
temp[i+2]=data1[i];
temp[0]=temp[1]=0;
x1=0x13d65;
k=num*8-1; /**k用来控制移动的次数**/
do
{
x2=(temp[0]<<24)+(temp[1]<<16)+(temp[2]<<8)+temp[3];
if(x2>=x1)
{ x2=x2-x1;
temp[0]=(x2&0xff000000)>>24;
temp[1]=(x2&0x00ff0000)>>16;
temp[2]=(x2&0xff00)>>8;
temp[3]=(x2&0xff);
}
else
{
temp[0]<<=1;
temp[0]=temp[0]|(temp[1]>>7); /*小的情况整体移动*/
for(j=1;j<18;j++)
{
temp[j]=temp[j]<<1;
temp[j]=temp[j]|(temp[j+1]>>7);
}
k--;
}
}while(k>0) ;
x2=(temp[2]<<8)+temp[3];
x2+=temp[1]>>7;
}
short CheckCheckSum(dataset data1)
{
char temp[18];
int i,j;
for(i=0;i<16;i++)
temp[i]=data1.data[i];
temp[16]=(data1.checksum&0xff00)>>8;
temp[17]=(data1.checksum&0xff);
j=GetCheckSum(temp,18);
return j;
}
main()
{
ft3frame ft1;
unsigned char data[100];
int i,j,k;
char *ptr;
for(i=0;i<100;i++)
{
data[i]=i+1;
}
k=0;
for(i=0;i<6;i++) /***对ft1帧中的八位数付初值***/
{
for(j=0;j<16;j++)
{
ft1.data[i].data[j]=data[k];
k++;
}
ft1.data[i].checksum=GetCheckSum(ft1.data[i].data,16);/**每一个分组中**/
j=CheckCheckSum(ft1.data[i]); /**校验码计算**/
printf("j=%x ",j);
}
ft1.flag=0x0564;
ptr=(char *)&ft1;
for(i=0;i<100;i++)
printf("%02x ",*ptr++);
}
真诚希望高手来解决我的问题 ,更加真诚的谢谢