4

我想在python中计算一串十六进制值的CRC32校验和。我找到了 zlib.crc32(data) 和 binascii.crc32(data),但是我发现使用这些函数的所有示例都将“data”作为字符串(例如“hello”)。我想将十六进制值作为数据传递并找到校验和。我尝试将数据设置为十六进制值(例如 0x18329a7e),我得到一个 TypeError:必须是字符串或缓冲区,而不是 int。当我将十六进制值设为字符串(例如,'0x18329a7e')时,该函数会进行评估,但我认为它不会评估正确的校验和。任何帮助,将不胜感激。谢谢!

4

3 回答 3

12

我想你正在寻找binascii.a2b_hex()

>>> binascii.crc32(binascii.a2b_hex('18329a7e'))
-1357533383
于 2011-04-05T19:51:39.617 回答
1
>>> import struct,binascii
>>> ncrc = lambda numVal: binascii.crc32(struct.pack('!I', numVal))
>>> ncrc(0x18329a7e)
-1357533383
于 2011-04-05T19:49:31.493 回答
0

尝试将十六进制值列表转换为字符串:

t = ['\x18', '\x32', '\x9a', '\x7e']
chksum = binascii.crc32(str(t))
于 2011-04-05T19:41:37.767 回答