亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
請(qǐng)問(wèn)個(gè)用C語(yǔ)言求 網(wǎng)際校驗(yàn)和的問(wèn)題
[打印本頁(yè)]
作者:
netdoger
時(shí)間:
2016-03-31 15:42
標(biāo)題:
請(qǐng)問(wèn)個(gè)用C語(yǔ)言求 網(wǎng)際校驗(yàn)和的問(wèn)題
網(wǎng)際校驗(yàn)和是說(shuō):
發(fā)送方對(duì)要發(fā)送是數(shù)據(jù)劃分為許多16位(2個(gè)字節(jié)),如果數(shù)據(jù)的字節(jié)數(shù)
為奇數(shù),則在末尾補(bǔ)一個(gè)字節(jié)0湊成偶數(shù),對(duì)這些系列反碼求和,便得校驗(yàn)和;
可是我看網(wǎng)絡(luò)上的代碼都是先求和,再取反:
unsigned short checksum(unsigned short* buffer, int size)
{
unsigned long cksum = 0;
while(size>1)
{
cksum += *buffer++;
size -= 2;
}
if(size)
{
cksum += *(u_char*)buffer;//補(bǔ)0的字節(jié)為高8位
}
cksum = (cksum>>16) + (cksum&0xffff); //將高16bit與低16bit相加
cksum += (cksum>>16); //將進(jìn)位到高位的16bit與低16bit 再相加
return (unsigned short)(~cksum);
}
可是我自己算了兩個(gè)16位:0x00ff,0xff00,按照定義是先取反再求和,
就是~(0x00ff)+~(0xff00)=0xff00+0x00ff=0xffff;
如果用上面的代碼得出的結(jié)論是0,請(qǐng)問(wèn)這是怎么回事?
我想網(wǎng)絡(luò)上的代碼應(yīng)該不會(huì)錯(cuò)的,可是為什么按照定義來(lái)算,
與程序計(jì)算得不對(duì)呢?錯(cuò)在哪了?
作者:
idi0t
時(shí)間:
2016-03-31 16:27
最高位相加后產(chǎn)生進(jìn)位,則最后得到的結(jié)果要加1 ?
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2