坑爹阿,python 2.x 的版本中,binascii.crc32计算出来的crc32带负号

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] 间的无号整数,因此不需额外加上修正。

必需这样才能与c计算出来的一致:
crc = binascii.crc32(str,crc) & 0xffffffff
下面这个才是正确的

In [41]: binascii.crc32("我们")& 0xffffffff
Out[41]: 3691803881L

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章