2017-05-18 71 views
1

假設我有兩個數字X = 0xABC; Y = 0xDE。 我想計算Z上的CRC-32,它與X連接成Y即Z = 0xABCDE。如何結合CRC-32結果?

我有CRC(X)和CRC(Y)可用。我如何計算CRC(Z)?

回答

0

看看crc32_combine()zlib的方法。

其基本思想是使用CRC的線性。與0x000DE排斥的0xABC00的CRC是其相應CRC的排他性。如果我忽略預處理和後處理(由於原因可能由讀者推導出),前導零不會更改CRC,因此0xDE的CRC與0x000DE的CRC相同。所以我需要做的就是計算從0xABC的CRC開始時追加零的效果,以獲得0xABC00的CRC。然後是排他性的或這兩個CRC。

crc32_combine()使用矩陣乘法來計算爲O追加Ñ零的效果(日誌(Ñ))的時間,而不是O(Ñ)時間,所以組合的CRC是非常快的,無論的長度的原始消息。

+0

我在谷歌羣組閱讀您的答案,[鏈接](https://groups.google.com/forum/#!topic/comp.compression/SHyr5bp5rtc)。我面臨的問題是,我試圖在硬件(FPGA)上實現這一點。我有用於** 0xABC **和** 0xDE **的並行CRC-32計算器,但是當我嘗試通過** 0xABC00 **和** 0x000DE **計算CRC-32,然後異或CRC時,我得到由於ZEROS錯誤的結果。 – Tushar