求C++大大回帮忙翻译几行C++的代码.小弟新手没分.万分感谢.

求C++大大来帮忙翻译几行C++的代码...............小弟新手没分............................万分感谢...
下面的代码是一段IP报文求校验和的函数。想把它移植到易语言里,但小弟没有真正的学过C++,只是凭借易语言的基础对下面的前部分代码做了一些翻译(也不知道对不对),但后部分的代码我就理解不了了,希望大神们帮帮忙。感谢不尽!!!



USHORT checksum(USHORT *buffer, int size)  //CheckSum:计算校验和的子函数 返回值为USHORT(短整形)。参数1是缓冲区指针,参数2是缓冲区长度


    unsigned long cksum=0;  //声明一个长整形cksum计数
    while(size >1) {  //如果缓冲区大于1 就继续循环
    cksum+=*buffer++;  //cksum=cksum+buffer指针中的值
    size -=sizeof(USHORT);  //size=size-USHORT的长度
    } 
    if(size ) {  //如果size变量的值不为0
    cksum += *(UCHAR*)buffer;  //......................看不懂,解释不了....
    } 

    cksum = (cksum >> 16) + (cksum & 0xffff); //......................看不懂,解释不了....
    cksum += (cksum >>16);   //......................看不懂,解释不了....
    return (USHORT)(~cksum);  //......................看不懂,解释不了....


------解决方案--------------------
    unsigned long cksum=0; 	 //声明一个长整形cksum计数
    while(size >1) {   //如果缓冲区大于1 就继续循环
    cksum+=*buffer++;   //cksum=cksum+buffer指针中的值
    size -=sizeof(USHORT);   //size=size-USHORT的长度
    } 
    if(size ) {   //如果size变量的值不为0
    cksum += *(UCHAR*)buffer;  //......................看不懂,解释不了.... //只剩下一个字节,所以直接加了一个byte.
    } 


//------------后面这三个是checksum的算法。自己查看一下如果计算checksum
    cksum = (cksum >> 16) + (cksum & 0xffff); //......................看不懂,解释不了....
    cksum += (cksum >>16);    //......................看不懂,解释不了....
    return (USHORT)(~cksum);   //......................看不懂,解释不了....