在3.0版中更改:始终返回无符号值。要在所有Python版本和平台上生成相同的数值,请使用 crc32(data)& 0xffffffff的
但为什么我们需要使用按位和二进制数设置为所有1?不管结果是否相同(如任何二进制数字BITWISE ANDED,所有1' s将始终是相同的二进制数)?这看似随意的细节让我感到不舒服。
答案 0 :(得分:3)
按位&
强制将值转换为无符号整数。例如,考虑一下:
>>> -2 & 0xffffffff
4294967294
根据您引用的注释,在3.0中Python已更改为始终返回无符号值,而在以前的版本中,crc32()
方法可能返回了有符号值。
例如,在Python 2.7.11中:
>>> crc32('the quick brown fox')
-1849621814
但是在Python 3.4.3中:
>>> crc32(b'the quick brown fox')
2445345482
所以你在这里得到不同的值,但是如果在Python 2.7中你按位执行,你得到的值与Python 3.4相同:
>>> crc32('the quick brown fox') & 0xffffffff
2445345482