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