32ビットの符号なし整数を使用してCRC16を計算するコードを作成しています。 CRC演算を実行するXOR関数から戻り値を出力しようとすると、常に0が出力されます。print文などのさまざまなデバッグ方法を試しましたが、わかりません!CRCチェックXOR関数の戻り値は常に0です
は、ここに私のXOR関数です:
uint32_t XOR(uint32_t divisor, uint32_t dividend)
{
uint32_t divRemainder = dividend;
uint32_t currentBit;
for(currentBit = 32; currentBit > 0; --currentBit)
{
if(dividend && 0x32)
{
divRemainder = divRemainder^divisor;
}
divRemainder = divRemainder << 1;
}
return (divRemainder >> 8);
}
上記のメソッドを呼び出す関数:
void crcCalculation(char *text, FILE *input, char *POLYNOMIAL)
{
int i = strlen(text);
uint32_t dividend = atoi(POLYNOMIAL);
uint32_t result;
readInput(text, input);
printText(text);
printf("CRC 16 calculation progress:\n");
if(i < 504)
{
for(; i!=504; i++)
{
text[i] = '.';
}
}
result = XOR((uintptr_t)POLYNOMIAL, dividend);
printf(" - %d", result);
}
は、一定の多項式(私はCRC 16のためにこれを正しく計算願っています:
#define POLYNOMIAL A053
正しい方向に微調整していただければ幸いです。
論理ANDとビットANDの違いをご存知ですか? – user694733
@ user694733私はそうではない、私は彼らが同じものだと思った。私はそれを読むでしょう。 – starlight
'POLYNOMIAL'が指しているデータではなくポインタ自体のチェックサムを作成しません。それはあまり役に立たないようです。 'text'文字列のチェックサムも計算しません(ゼロ終了していない可能性があります)。あなたは本当にマクロを定義していますか?表示するコードと組み合わせても、それほど意味がありません。 –