如何计算 CRC32 从 Python, 匹配在线结果?

我正在努力计算 / 产生 CRC32 hash 从一些随机字符串使用 Python, 但它们与我从在线源生成的值对应。 这就是我对我所做的 PC,


>>> import binascii
>>> binascii.crc32/'hello-world'/
-1311505829


另一种方法


>>> import zlib
>>> zlib.crc32/'hello-world'/
-1311505829


上述结果是相同的事实,告诉我我正确调用了该功能。 但如果我进入以下在线来源,

http://www.lammertbies.nl/comm ... .html
http://crc32-checksum.waraxe.us/
/

http://www.md5calc.com/
/选择 CRC32B 从下拉列表中/

一段时间 "hello-world" 所有这些都有相同的含义 = b1d4025b

有谁知道我需要做些什么来获得相关结果?

当我获得这个问题时,它发生在我身上,我可能需要转换我的结果 Python 在 hex,


>>> hex/zlib.crc32/'hello-world'//
'-0x4e2bfda5'


不幸的是,它也没有帮助。 :/
已邀请:

诸葛浮云

赞同来自:

Python 制作符号32位 CRC.

这些网站使无符号32位 CRC.

其余的含义与您所看到的相同:


>>> 0x100000000 - 0xb1d4025b == 0x4e2bfda5
True


从32位32位整数转换的一种快速方法是: *


>>> -1311505829 % /1<<32/
2983461467


或者 hex:


>>> hex/-1311505829 % /1<<32//
'0xb1d4025b'



& 0xFFFFFFFF

或者
% 0x100000000

, 或者
& /2**32-1/

, 或者
% /2**32/

等等,这些都是制造同样的双量点的所有相同方式; 一切都归结为哪一个找到最可读的。

* 例如,它仅适用于制作户外整数划分的语言 Python /
-3 // 2 == -2

/; 例如,用语言制作截断整数的语言 Java /
-3 / 2 == -1

/, 你仍然获得负数。 例如,甚至不需要分离和模式的语言,例如 C, 所有费率都被取消,但在 C 您只需给出所需类型的字节。

詹大官人

赞同来自:

https://docs.python.org/3/libr ... crc32
提供使用以下方法 "在所有版本和平台中生成相同的数值 Python".


import zlib
hex/zlib.crc32/b'hello-world'/ & 0xffffffff/


结果-
0xb1d4025b

, 正如预期的那样。

八刀丁二

赞同来自:

看起来 python 返回标记的整数 /因此,负数/, 虽然其他人没有标志返回整数。

我试图使用模块 2^32, 他给了与这些网站相同的含义。


>>> hex/zlib.crc32/'hello-world'/% 2**32// 
'0xb1d4025b'

要回复问题请先登录注册