|
아래와 같이 했는데 원하는 값이 않나오네요. 고수님들 어디가 잘못된건지 봐주세요.
polynimial G(x) = 0x85 = 1000 0101, 8 Bit CRC 계산입니다.
data[2]={0x31,0x41} 일때 즉, "1A" 이면 CRC= 0x62 가 나와야 됨.
data[2]={0x31,0x44} 일때, "1D"이면 CRC=0x40 가 나와야 됨.
#define HEC_GENERATOR 0x85 // 키값
static unsigned char syndrome_table[256]; // CRC 테이블
void gen_syndrome_table() // CRC Table 생성
{
register int i, j, syndrome;
for ( i = 0; i < 256; i++ )
{
syndrome = i;
for ( j = 0; j < 8; j++ )
{
if ( syndrome & 0x80 )
syndrome = ( syndrome << 1 ) ^ HEC_GENERATOR;
else
syndrome = ( syndrome << 1 );
}
syndrome_table[i] = (unsigned char) syndrome;
}
}
unsigned char CalCRC(unsigned char data, int len) // CRC 계산
{
register unsigned char hec_accum = 0;
register int k;
for ( k = 0; k < len; k++ )
hec_accum = syndrome_table [ hec_accum ^ data[k] ];
return hec_accum;
}
|