crcmoddocumentation状态:

“ xorOut –与计算出的CRC值进行XOR的最终值。由某些CRC算法使用。默认为零。”

从该描述中,我期望将参数设置为非零数字(例如0xFFFFFFFF)等效于将参数为CRC的参数设为零,然后使用^运算符将其与该数字进行异或。

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

这是我的交互式解释器直接提供的一些代码。我希望最后一行是True。

>>> 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

最佳答案

从文档中:


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


这意味着,如果不指定initCrc,它将把寄存器初始化为最终的XOR值xorOut。如果要只对结果进行异或,则可以将initCrc设置为xorOut

10-05 18:45