(1)四位16進制數分別相加
(2)相加的結果去掉進位,保留四位16進制數
(3)保留的四位16進制數+進位
(4)得到的結果轉換成二進制
(5)取反
(6)再轉換成16進制數
具體編碼如下:
int checksum(unsigned long* buffer, int size)
{
unsigned long cksum = 0;
while(size>1)
{
cksum += *buffer++;
size -= sizeof(unsigned long);
}
if(size)
{
cksum += *(char*)buffer;
}
cksum = (cksum>>16) + (cksum&0xffff);
cksum += (cksum>>16);
return (unsigned long)(~cksum);
}