假设我有两个数字X = 0xABC; Y = 0xDE。 我想在Z上计算CRC-32,它是X连接到Y,即Z = 0xABCDE。
我有CRC(X)和CRC(Y)可用。如何计算CRC(Z)?
答案 0 :(得分:0)
请查看crc32_combine()
中zlib的方法。
基本思想是使用CRC的线性。 0xABC00
与0x000DE
排他或对的CRC是其对应的CRC的异或。如果我忽略了前处理和后处理(我可以将其留给读者导出的原因),前导零不会改变CRC,因此0xDE
的CRC与{的CRC相同{1}}。所以我需要做的就是计算从0x000DE
的CRC开始时附加零的效果,以获得0xABC
的CRC。那么排他性或那两个CRC。
0xABC00
使用矩阵乘法计算在O(log( n ))时间而不是O( n)附加 n 零的效果)时间,因此无论原始消息的长度如何,组合CRC都非常快。