crcmod
的documentation状态:
“ 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
。