读书人

求C++大大回帮忙翻译几行C++的代码.小

发布时间: 2013-11-06 16:26:37 作者: rapoo

求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); //......................看不懂,解释不了....


读书人网 >C++

热点推荐