如何用标准CRC-32(多项式0x04C11DB7)得到反向CRC结果?
用标准正向CRC-32代码得到反向CRC结果的步骤
要靠多项式为0x04C11DB7的标准正向CRC-32代码,算出和反向CRC32一致的0x83dcefb7,得按下面三步来:
先反转输入字节的每一位
输入是字符'1',对应ASCII值0x31,二进制是00110001。把每一位倒过来,变成10001100,也就是十六进制的0x8C。用标准正向CRC-32计算反转后的字节,初始值设为
0xFFFFFFFF
直接拿0x8C当输入,用标准正向CRC-32逻辑计算,初始值用0xFFFFFFFF(和反向CRC的初始值一致),算出来的结果是0xEDF73BC1——就是你之前反转目标值得到的那个数。最后把计算出的CRC结果整体位反转
把0xEDF73BC1这个32位数值的每一位全部反转,得到的就是0x83dcefb7,和反向CRC的结果完全匹配。
之前单独反转输入或者结果没用,是因为反向CRC32的逻辑就是先反转每个输入字节,走正向CRC流程,最后再反转整体结果,三个环节缺一个都不行。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

