unsigned short  CheckCRCSum(char *buffer, int size)
{
        unsigned long cksum=0;
        while(size >1)
        {
        cksum+=*buffer++;
        size -=sizeof(unsigned char);
        }
        if(size ) cksum += *(unsigned char*)buffer;  //这是干什么
        cksum =  (cksum >> 16) + (cksum & 0xffff);   //这两行呢
        cksum += (cksum >> 16);
        return (unsigned short)(~cksum);
}
还有就是,这个CRC校验码和我看得另外的CRC程序有什么区别(http://expert.csdn.ne
t/Expert/topic/2044/2044816.xml?temp=.3108942)

解决方案 »

  1.   

    unsigned int MakeCRC(unsigned char *x1,unsigned int crc_len2)
    {
    unsigned char  crc_j,r1,r2,r3,r4;
    unsigned int  crc_i,ch;
    *(x1+crc_len2)=0;
    *(x1+crc_len2+1)=0;
    r1=*x1;
    x1++;
    r2=*x1;
    x1++;
    for (crc_i=0;crc_i<crc_len2;crc_i++)
    {
    r3=*x1;
    x1++;
    for (crc_j=0;crc_j<8;crc_j++)
    {
    r4=r1;
    r1=(r1<<1);
    if ((r2&0x80)!=0)
    r1++;
    r2=r2<<1;
    if ((r3&0x80)!=0)
    r2++;
    r3=(r3<<1);
    if ((r4&0x80)!=0)
    {
    r1=r1^0x10;
    r2=r2^0x21;
    }
    }
    }
    ch=r1;
    ch<<=8;
    ch|=r2;
    return (ch);
    }这个的结构更为清晰,
      

  2.   

    crc不是补码之和嘛,
    主要想问程序的意思