我看到如下所示的相同的基本CRC-32算法的許多不同的實現中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;
}
它們中的一些再進S盒XOR被除數。其他人在進入位循環之前進行XOR,而其他人則使用按位反射。
對於給定用例,我需要考慮CRC-32的不同實現之間是否存在差異?是否使用按位反射或XOR-OUT必然比沒有?爲什麼有這麼多不同的實現呢?