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' 문자열 (0으로 끝나지 않을 수도 있음)에 대한 체크섬도 계산하지 않습니다. 정말로 매크로를 정의합니까? 표시하는 코드와 함께 사용하면 많은 의미가 없습니다. –