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