首部校驗和

(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);

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章