我尝试使用Python语言计算/生成一些随机字符串的CRC32散列,但它们与我从在线资源中生成的值不匹配。这是我在电脑上做的事情,
>>> import binascii
>>> binascii.crc32('hello-world')
-1311505829
另一种方法,
>>> import zlib
>>> zlib.crc32('hello-world')
-1311505829
上述结果相同的事实告诉我,我调用的函数是正确的。但是,如果我访问以下在线资源,
对于字符串"hello-world“,它们都给出了相同的值= b1d4025b
有谁知道我需要做什么,才能得到匹配的结果?
当我输入这个问题时,我突然想到我可能需要将我的Python结果转换为十六进制,
>>> hex(zlib.crc32('hello-world'))
'-0x4e2bfda5'
不幸的是,这也没有帮助。:(
发布于 2015-05-07 12:59:53
zlib.crc32 documentation建议使用以下方法“在所有Python版本和平台上生成相同的数值”。
import zlib
hex(zlib.crc32(b'hello-world') & 0xffffffff)
结果正如预期的那样是0xb1d4025b
。
发布于 2015-05-07 13:03:55
看起来python返回的是带符号的整数(因此是负数),而其他的返回的是无符号的整数。
我尝试使用2^32的模数,它给出了与这些站点相同的值。
>>> hex(zlib.crc32(b'hello-world')% 2**32)
'0xb1d4025b'
https://stackoverflow.com/questions/30092226
复制相似问题