crcmod的xorOut参数与手动xor'ing的行为不同

时间:2014-10-29 18:41:31

标签: python crc crc32

crcmod' documentation州:

" xorOut - 使用计算的CRC值进行XOR的最终值。由一些CRC算法使用。默认为零。"

我希望从该描述中将该参数设置为非零数字(例如,0xFFFFFFFF)等同于将CRC与参数0一起使用,然后使用^将其与该数字进行xor相符合操作

这不是我看到的行为。我认为错了什么?什么是xorOut参数的实际行为?

这里有一些直接来自我的交互式翻译的代码。我预计最后一行是真的。

>>> import crcmod
>>> crc32_func_noxor = crcmod.mkCrcFun(0x104c11db7, initCrc=0, rev=True, xorOut=0)
>>> crc32_func_xor = crcmod.mkCrcFun(0x104c11db7, initCrc=0, rev=True, xorOut=0xffffffff)
>>> crc32_func_noxor('12345678'.decode('hex'))^0xffffffff==crc32_func_xor('12345678'.decode('hex'))
False

1 个答案:

答案 0 :(得分:2)

来自文档:

  

initCrc - 用于启动CRC计算的初始值。这个   初始值应该是初始移位寄存器值,如果是,则反转   它使用反向算法,然后与最终的XOR值进行异或。   这相当于算法应返回的CRC结果   零长度字符串。默认为设置的所有位,因为该启动   值将占用前导零字节。从零开始   将忽略所有前导零字节。

这意味着如果您没有指定initCrc,它会将寄存器初始化为最终的XOR值xorOut。如果您希望对结果进行异或,那么您可以将initCrc设置为xorOut