使用十六进制输入在Python中计算CRC32校验和

4 投票
3 回答
22719 浏览
提问于 2025-04-16 15:08

我想在Python中计算一串十六进制值的CRC32校验和。我发现了zlib.crc32(data)和binascii.crc32(data)这两个函数,但我看到的例子里,'data'都是字符串(比如'hello')。我想把十六进制值作为数据传入,来找到校验和。我试着把数据设置为一个十六进制值(比如0x18329a7e),结果出现了一个类型错误:必须是字符串或缓冲区,而不是整数。当我把十六进制值变成字符串(比如'0x18329a7e')时,函数可以运行,但我觉得它计算的校验和不正确。希望能得到一些帮助。谢谢!

3 个回答

0

试着把一串十六进制的值转换成字符串:

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

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像在生活中,我们会根据天气决定穿什么衣服。如果外面下雨,我们就会穿雨衣;如果天气晴朗,我们就可以穿轻便的衣服。

同样,在代码中,我们可以使用“条件语句”来控制程序的行为。条件语句就像一个开关,只有在满足特定条件时,程序才会执行某些代码块。比如,如果用户输入的密码正确,程序就会允许他们登录;如果密码错误,程序就会提示用户重新输入。

这使得程序能够根据不同的情况做出不同的反应,从而让用户有更好的体验。

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

我觉得你在找的是 binascii.a2b_hex() 这个函数:

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

撰写回答