以下に示す同じ基本的な CRC-32 アルゴリズムのさまざまな実装を見てきました。
int remain;
int sbox[SIZESBOX];
int dividend;
int bit;
for(dividend = 0; dividend < SIZESBOX; dividend++)
{
remain = dividend << 24;
for(bit = 0; bit < 8; bit++)
{
if(remain & TOPBIT)
{
remain = (remain << 1) ^ POLYNOMIAL;
}
else
{
remain = (remain << 1);
}
}
sbox[dividend] = remain;
}
それらのいくつかは、sbox に入る前に被除数を XOR します。ビット ループに入る前に XOR を使用するものもあれば、ビットごとのリフレクションを使用するものもあります。
特定のユースケースについて、CRC-32 のさまざまな実装間で考慮する必要がある違いはありますか? ビットごとのリフレクションまたは XOR-OUT を使用するものは、使用しないものよりも必ずしも優れていますか? とにかく多くの異なる実装があるのはなぜですか?