1

この記事からの引用:

多くの業界では、最初の多項式を使用して CRC テーブルを作成し、それをパフォーマンスのために適用しています。IEEE 802.3 で定義されているデフォルトの多項式は、16 ビットの場合は 0xA001、32 ビットの場合は 0x04C11DB7 です。ここでは C# を使用しているため、16 ビットの場合は 0x8408、32 ビットの場合は 0xEDB88320 の反転バージョンを使用する必要があります。サンプルでもこれらの多項式を使用します。

C# で hex によって定義された int の逆バージョンを使用する必要があるのはなぜですか?
そして、引用された記事の著者はどのようにして04C11DB70xEDB88320に反転したのでしょうか?

また、他の crc32 C# および C 実装も調べました。それらのすべてで、C は 04C11DB7 を使用し、C# は 0xEDB88320 を使用します。

4

1 に答える 1

3

codeproject.com の記事で読んだものはすべて正確であると思い込まないようにしてください。これは査読済みのサイトではなく、SO で利用できる種類のツールでは簡単に修正できないナンセンスがたくさんある傾向があります。

言語とは何の関係もありません。多項式が選択であるのと同様に、CRC32 を実装するときにビット順序を選択できます。例としては、逆のビット順序を使用する BZip2 とそうでない GZip があります。0xedb88320 をビットとして書き出して順序を逆にすると、0x04c11db7 の逆であることが簡単にわかります。

0xedb88320 = 1110 1101 ... 0010 0000
reversed   = 0000 0100 ... 1011 0111
to hex     = 0    4    ... B    7

詳細については、このウィキペディアの記事セクションを参照してください。

于 2013-01-13T14:03:54.357 に答える