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
答案 0 :(得分:2)
来自文档:
initCrc - 用于启动CRC计算的初始值。这个 初始值应该是初始移位寄存器值,如果是,则反转 它使用反向算法,然后与最终的XOR值进行异或。 这相当于算法应返回的CRC结果 零长度字符串。默认为设置的所有位,因为该启动 值将占用前导零字节。从零开始 将忽略所有前导零字节。
这意味着如果您没有指定initCrc
,它会将寄存器初始化为最终的XOR值xorOut
。如果您希望仅对结果进行异或,那么您可以将initCrc
设置为xorOut
。