In [32]: binascii.crc32("我们")
Out[32]: -603163415
根据官方文件,在 Python 2.x 的版本中,binascii.crc32 所计算出来的 CRC 值域为 [-2^31, 2^31-1] 之间的有号整数,为了要与一般 C 所实作的 CRC 结果作比对,需要将其转为无号整数,所以加上「& 0xffffffff」这段来做转换。如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无号整数,因此不需额外加上修正。
crc = binascii.crc32(str,crc) & 0xffffffff
下面这个才是正确的In [41]: binascii.crc32("我们")& 0xffffffff
Out[41]: 3691803881L