求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); //......................看不懂,解释不了....
}
------解决方案--------------------
下面的代码是一段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); //......................看不懂,解释不了....