鍙嶇爜鍔?/span>榪愮畻錛岀劧鍚庢斁鍏ユ牎楠屽拰瀛楁(16浣?銆?br>
浜屻佹楠屾牎楠屽拰錛氫笌璁$畻鏍¢獙鍜屼竴鏍峰啀璁$畻涓閬嶏紝濡傛灉涓哄叏1璇存槑姝g‘銆?br>
涓婇潰鐨勫弽鐮佸姞鎴戞槸鑷繁鐚滅殑涓嶇煡閬撳彨浠涔堝ソ錛屽師鏂囦腑鐨勮В閲婃槸(1's complement sum,絎﹀彿涓?')銆傝繖涓氨涓嶆噦浜嗭紝鍙ソ鎸夎嚜宸辯悊瑙g殑鍐欎簡銆?
鍏蜂綋鎿嶄綔鏄厛鍙栧弽鍐嶅姞錛屽浣曟湁榪涗綅錛岃繘浣嶈鍔犲埌鏈浣庝綅涓婏紝鐩稿綋浜庡驚鐜姞浜嗐?br> 涓鑸搷浣滀負浜嗘彁楂樻ц兘錛屽線寰鍏堝叏閮ㄧ浉鍔狅紝鍐嶅姞涓婅繘浣嶏紝鍐嶅彇鍙嶏紝灝卞涓婇潰鐨勭▼搴忛噷涓鏍楓傝嚦浜庝負浠涔堣鎼為偅涔堝鏉傦紝鎴戠寽鏄暟瀛︾殑涓ヨ皚鍚с?br> 涓嬮潰浠庢暟瀛︾殑瑙掑害鐪嬭繖涓棶棰橈細
涓鑸殑鐩稿姞鑲畾瑕佹孩鍑烘垨榪涗綅鐨勶紝閭f孩鍑虹殑閮ㄥ垎淇℃伅灝變涪鎺変簡銆備負浜嗕繚鐣欐孩鍑虹殑淇℃伅錛岄渶瑕佹妸榪涗綅淇℃伅淇濈暀涓嬫潵錛屼篃灝辨槸縐誨埌浣庝綅涓婄浉鍔狅紝鑰岃繖涓竴鑸姞娉曟槸寰堥毦瀹炵幇鐨勶紝鎵浠ラ渶瑕佸埆鐨勬敼榪涘悗鐨勫姞娉曪紙鍙嶇爜鍔狅級銆?br> 鎯寵冭檻8浣嶆椂鐨勬儏鍐碉細
0xF0 + 0xF0 = 0xE0 + 婧㈠嚭;
濡備綍淇濈暀婧㈠嚭浣嶏紝涓庢渶浣庝綅鍏堝姞灝卞緱鍒幫細
0xF0 + 0xF0 = 0xE1;
涓婇潰榪愮畻鏄敊璇殑錛屼絾鏈変粈涔堝姞娉曞彲浠ユ椂涓婂紡鎴愮珛鍛紵錛燂紵
絳旀灝辨槸鍙嶇爜鍔?璁$畻鏍¢獙鍜?錛?br>
~0xF0 + (~0xF0) = ~0xE1; ==> (0xF0 +' 0xF0 = ~0xE1 = 0x1E), 0x1E灝辨槸鏍¢獙鍜屻?/span>
媯楠屾牎楠屽拰:
0xF0 +' 0xF0 +' 0x1E = 0xFF; 鏍¢獙鏃跺悓鏃惰綆楁牎楠屽瓧鑺傦紝緇撴灉涓?xFF錛屼負姝g‘銆?
榪欎釜鏂規(guī)硶鑰屼笖涓嶤PU鐨勫瓧鑺傚簭鏃犲叧錛屽叿浣撶湅閭d釜RFC1071鍘匯?
榪欎釜涔熷お緇曚簡錛岀敤紼嬪簭瀹炵幇鍩烘湰涓婃晥鐜囧緢浣庯紝鎵浠ュ彧鑳借蛋鎹峰緞:) 錛岃創(chuàng)涓婃牎楠屼唬鐮侊細
1 bool validatechecksum(unsigned short *buffer, int size)
2 {
3 unsigned long cksum=0;
4
5 while(size >1)
6 {
7 cksum+=*buffer++;
8 size-=sizeof(unsigned short);
9 }
10
11 if(size)
12 cksum+=*(unsigned short*)buffer;
13
14 cksum=(cksum >> 16)+(cksum&0xffff);
15 cksum+=(cksum >>16);
16
17 return ((unsigned short)cksum == 0xFFFF);
18 }
鍙傝冿細http://blog.csdn.net/World7th/archive/2008/12/31/3669278.aspx

]]>