110,534
社区成员
发帖
与我相关
我的任务
分享
u16 clac_sum(void *data,u32 len)
{
if(len)
{
u32 cksum=0;
cksum += *(u8 *)p;
__packed u16 *p = data;
}
while(len>1)
{
cksum = (cksum >>16) + (cksum & 0xffff);
cksum += *p++;
cksum +=(cksum>>16);
len-=2;
return ~cksum;
}
}
u16 clac_sum(void *data,u32 len)
{
if(len)
{
u32 cksum=0;
__packed u16 *p = data;
cksum += *(u8 *)p;
while(len>1)
{
cksum = (cksum >>16) + (cksum & 0xffff);
cksum += *p++;
cksum +=(cksum>>16);
len-=2;
return ~cksum;
}
}
}
也不对啊,while里面一次就return了?
public ushort clac_sum(byte[] data, uint len)
{
uint cksum = 0;
int index = 0;
while(len > 1)
{
cksum += BitConverter.ToUInt16(data, index);
index += 2;
len -= 2;
}
if (len > 0)
{
cksum += data[len - 1];
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >> 16);
return (ushort)~cksum;
}
u16 calc_sum(void *data, u32 len)
{
u32 cksum = 0;
__packed u16 *p = data;
while (len > 1)
{
cksum += *p++;
len -=2;
}
if (len)
{
cksum += *(u8 *)p;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >> 16);
return ~cksum;
}
u16 clac_sum(void *data,u32 len)
{
u32 cksum=0;
__packed u16 *p = data;
while(len>1)
{
cksum += *p++;
len-=2;
if(len)
{
cksum += *(u8 *)p;
}
cksum = (cksum >>16) + (cksum & 0xffff);
cksum +=(cksum>>16);
return ~cksum;
}
}
这样子总对了吧...