首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

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


热点排行