2017-05-18 22 views
1

私は2つの数字X = 0xABCを持っているとしましょう。 Y = 0xDE。 私はZを介してCRC-32を計算したいと思います.XはYに連結されています。すなわちZ = 0xABCDEです。CRC-32の結果を結合するにはどうすればいいですか?

私はCRC(X)とCRC(Y)を利用できます。 CRC(Z)はどのように計算できますか?

答えて

0

zlibcrc32_combine()を参照してください。

基本的な考え方は、CRCの線形性を使用することです。 0x000DEと排他的ORされた0xABC00のCRCは、対応するCRCの排他的論理和である。私が前処理と後処理を無視すると(これは読者が派生させる理由から可能です)、先行ゼロはCRCを変更しないので、0xDEのCRCは0x000DEのCRCと同じです。だから私がする必要があるのは、のCRCで始まるときに0を付加する効果を計算して、0xABC00のCRCを得ることだけです。そして、これらの2つのCRCを排他的にする。

crc32_combine()はOでNゼロを付加する効果を計算するために行列乗算を使用して()(Nログ)の代わりにO(N)時間の時間なので、CRCを組み合わせることに関係なくの長さの非常に速いです元のメッセージ

+0

Googleグループ[[link](https://groups.google.com/forum/#!topic/comp.compression/SHyr5bp5rtc))で回答を読みました。私が直面している問題は、これをハードウェア(FPGA)に実装しようとしていることです。 ** 0xABC **と** 0xDE **の並列CRC-32計算機を持っていますが、** 0xABC00 **と** 0x000DE **を超えてCRC-32を計算しようとするとCRCがXORされます。 ZEROSのために間違った結果。 – Tushar

関連する問題