校驗和是經常使用的,這里簡單的列了一個針對按字節計算累加和的代碼片段。其實,這種累加和的計算,將字節翻譯為無符號整數和帶符號整數,結果是一樣的。
使用python計算校驗和時記住做截斷就可以了。 這里僅僅是作為一個代碼樣本,權作標記,直接上代碼
簡單說明一下上面的腳本。如果是當作無符號整數來計算,則算法要簡單很多,實際上都可以縮減為一句代碼的事。如果是當作帶符號整數來計算,則算法要復雜一下,要處理各種上溢出和下溢出的情形。正如文章開頭指出的,不論使用哪種方式,最后的二進制表示都是一樣的。所以一般情況下可以使用無符號整數來計算校驗和,簡單快速。
下面是驗證使用的例子,
- data1=bytes(b'\x01\x7F\xFF')
- data2=bytes([random.randrange(0,256) for i in range(0, 10000)])
- assert(uchar_checksum(data1) == 127)
- assert(char_checksum(data1) == 127)
- assert((uchar_checksum(data2)&0xFF) == (char_checksum(data2)&0xFF))
- print('OK')
上面的算法也很容易推廣到兩個字節或者四個字節的校驗和計算
over