1、1的補碼用在tcp、ip的校驗和中,而平時學習的補碼時 2 的補碼,即整數的補碼和原碼相同,負數的補碼按位取反加 1(符號位不變)。
2、1的補碼:是乙個對稱的系統,即乙個數和其相反數(1的補碼)相加結果一定為 0。0分為正 0和負 0,校驗和的計算原理就是基於此,即待傳送資料的 1 的補碼表示法和其相反數 1 的補碼相加結果一定為 0,例如0111111111111111(+32767)按位取反即得到1000000000000000(-32767),於是二者相加的結果為1111111111111111(-0)。
3、ip 校驗和演算法:
ip 校驗演算法將待傳送的資料按 16bit(0xffff)進行累加,若產生進製,則對進製 位繼續累加直到無進製為止,最後將產生的累加和按位取反,得到待傳送資料的校驗和,並且校驗和的值連同待傳送資料一起傳送給資料接收方。接收方在收到資料後,按 16 bit依次累加收到的資料,若累加結果為 -0,表示資料傳輸過程中沒有發生錯誤,否則認為資料有錯,丟棄該資料。
4、舉例:
序列:0800 04 00 14 00 61 62 63 64(16進製制)
1.對此序列按16bit累加:
0800
04 00
14 00
61 62
+ 63 64
----------------
e4 c6
2.對累加結果按位取反:0x1b39
3.e4 c6 + 1b 39 = ff ff
5、程式:
/* 校驗和 */
u16 checksum(u8 *buf/*待傳送資料的快取指標*/, int len/*待傳送資料的長度*/)
/* 當len為奇數時用最後乙個位元組進行補齊 */
if(len)
sum+=*(u8 *)cbuf;/*用最後 1 個位元組補齊*/
//判斷是否有 16 bit加法溢位,若有則將進製位繼續累加直到無進製
sum=(sum>>16)+(sum & 0xffff);
sum+=(sum>>16); /*
while(sum >> 16)
sum=(sum>>16)+(sum & 0xffff);
*/return ~sum;
}
表單字段校驗
字段校驗唯一 controlle層中 檢驗視窗編號是否重複 param winnum 視窗編號 param id 視窗id return responsebody public boolean checkusername integer winnum,integer id 2 service層中直接...
Java欄位校驗工具
當前對欄位校驗僅支援非空和字段長度的校驗 fieldvaild注釋 為了能保證對物件所有欄位都有自定義配置是否校驗,需要自定義註解 校驗注釋 author tu retention retentionpolicy.runtime target public inte ce fieldvaild在使用...
Hive欄位校驗測試
結論 1.如果是varchar型別長度短於檔案中字段長度,通過hql查詢時,會直接截斷超過varchar型別長度的字元顯示 2.如果表字段型別和hdfs檔案中資料型別不匹配,則直接顯示null drop table tmp.test0713 create table tmp.test0713 pk ...