計算檢驗和

USHORT checksum(USHORT *buffer, int size) // 注意 buffer類型   指向ushort類型(16位)

 { 

unsigned long cksum=0;  //32位


while(size >1) { 
cksum+=*buffer++; 
size -=sizeof(USHORT);    // sizeof(USHORT) = 2


if(size)   //size奇數時

 { 

cksum += *(UCHAR*)buffer; 

//cksum>>16;  //取高16位
//cksum&0xffff;   //取低16位
cksum = (cksum >> 16) + (cksum & 0xffff);   // 高16位+低16位
cksum += (cksum >>16);  //若上一步溢出,即上一步得出的cksum的高16位不位0,則將高16位加到cksum中。
return (USHORT)(~cksum); //各位取反   注意返回值爲16位
發佈了53 篇原創文章 · 獲贊 15 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章