用 Python 計算 CRC32 很簡單,只要使用內建的 binascii 模組即可。
import binascii print binascii.crc32("hello world") 要反覆計算的話,可以用:
crc = binascii.crc32("hello") crc = binascii.crc32(" world", crc) 其中的第二行,將前一步驟所計算的 CRC 結果作為參數再次傳入函式中。
如果要計算檔案的 CRC32,可以透過以下函式來計算:
import binascii def computeFileCRC(filename): try: blocksize = 1024 * 64 f = open(filename, "rb") str = f.read(blocksize) crc = 0 while len(str) != 0: crc = binascii.crc32(str,crc) & 0xffffffff str = f.read(blocksize) f.close() except: print "compute file crc failed!" return 0 return crc 上面比較特別要注意的是這行:
crc = binascii.crc32(str,crc) & 0xffffffff 根據官方文件,在 Python 2.x 的版本中,binascii.crc32 所計算出來的 CRC 值域為 [-2^31, 2^31-1] 之間的有號整數,為了要與一般 C 所實作的 CRC 結果作比對,需要將其轉為無號整數,所以加上 & 0xffffffff 這段來做轉換。如果是 Python 3.x 的版本,其計算結果為 [0, 2^32-1] 間的無號整數,因此不需額外加上修正。
...