私は2つの数字X = 0xABCを持っているとしましょう。 Y = 0xDE。 私はZを介してCRC-32を計算したいと思います.XはYに連結されています。すなわちZ = 0xABCDEです。CRC-32の結果を結合するにはどうすればいいですか?
私はCRC(X)とCRC(Y)を利用できます。 CRC(Z)はどのように計算できますか?
私は2つの数字X = 0xABCを持っているとしましょう。 Y = 0xDE。 私はZを介してCRC-32を計算したいと思います.XはYに連結されています。すなわちZ = 0xABCDEです。CRC-32の結果を結合するにはどうすればいいですか?
私はCRC(X)とCRC(Y)を利用できます。 CRC(Z)はどのように計算できますか?
zlibのcrc32_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を組み合わせることに関係なくの長さの非常に速いです元のメッセージ
Googleグループ[[link](https://groups.google.com/forum/#!topic/comp.compression/SHyr5bp5rtc))で回答を読みました。私が直面している問題は、これをハードウェア(FPGA)に実装しようとしていることです。 ** 0xABC **と** 0xDE **の並列CRC-32計算機を持っていますが、** 0xABC00 **と** 0x000DE **を超えてCRC-32を計算しようとするとCRCがXORされます。 ZEROSのために間違った結果。 – Tushar