我想传送的是8个bit字节的单位数据,校验和怎么用什么算法啊,16还是32的啊
另外我把校验和字段放在数据头末尾,和数据之前我在发送和接收的时候怎么计算检验和呢发送的时候校验和字段为空,收的时候就有了,,,·!大家给点意见,,,·!我是想计算整个数据包的校验,包括数据头·!

解决方案 »

  1.   

    1.  使用一下方法计算校验和:
    p->chksum = 0; /* 先将校验和字段填0 */
    p->chksum = checksum((u_short *)pBuff, sizeof(pBuff) / sizeof(u_short)); /* 计算校验和 */
    其中checksum定义如下:
    unsigned short checksum(unsigned short *buf, unsigned long nwords)
    {
        unsigned long sum;    /* 首部16位序列累加 */
        for (sum = 0; nwords > 0; nwords --)
        {
            sum += *buf ++;
        }    /* 将结果折合成16位 */
        while (sum > 0xFFFF)
        {
            sum = (sum >> 16) + (sum & 0xFFFF);
        }    /* 返回结果的反码 */
        return (unsigned short)(~sum);
    }
    2.  收到数据时:
        if (0 != checksum((u_short *)pBuff, sizeof(pBuff) / sizeof(u_short)))
        {
            /* 错误数据 */
        }
      

  2.   

    用标准checksum算法或者自己写一种算法来验证自己数据的正确性,可以根据自己需要使用16还是32的