Python中的CRC32校验和,带有十六进制输入

时间:2011-04-05 19:15:01

标签: python string hex checksum crc32

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

3 个答案:

答案 0 :(得分:12)

我认为您正在寻找binascii.a2b_hex()

>>> binascii.crc32(binascii.a2b_hex('18329a7e'))
-1357533383

答案 1 :(得分:1)

>>> import struct,binascii
>>> ncrc = lambda numVal: binascii.crc32(struct.pack('!I', numVal))
>>> ncrc(0x18329a7e)
-1357533383

答案 2 :(得分:0)

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

t = ['\x18', '\x32', '\x9a', '\x7e']
chksum = binascii.crc32(str(t))