현재 위치 - 대출자문플랫폼 - 신용 카드 지식 - CRC32 알고리즘

CRC32 알고리즘

코딩 효율성을 높이기 위해 실제 응용에서는 룩업 테이블 방식을 주로 사용하여 CRC-32 검사를 완료합니다. 다음은 CRC-32 검사를 생성하는 서브루틴입니다.

부호 없는 긴 crc_32_tab[256]={

0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a 3,0x0edb8832,…, 0x5a05df1b, 0x2d02ef8d

};//미리 계산한 매개변수 테이블에는 256개의 항목이 있는데, 전부 나열되지는 않습니다.

unsigned long generateCRC32(char xdata * DataBuf,unsigned long len)

{

unsigned long oldcrc32

unsigned long crc32;

unsigned long oldcrc;

unsigned int charcnt;

oldcrc32 = 0x00000000; 0

charcnt=0;

while (len--) {

t= (oldcrc32 >> 24) & 0xFF; 삭제된 섹션 값

oldcrc=crc_32_tab[t]; //이동된 바이트 값을 기준으로 테이블 조회

c=DataBuf[charcnt]; //새로 이동된 바이트 값

oldcrc32= (oldcrc32 << 8) | c; //새로 이동된 바이트 값을 레지스터의 마지막 바이트에 추가합니다.

oldcrc32=oldcrc32^oldcrc ; / /레지스터와 찾은 값 사이의 xor 연산을 실행합니다.

charcnt++

}

crc32=oldcrc32; ;

}

매개변수 테이블은 먼저 PC에서 계산할 수도 있고 프로그램 초기화 중에 완료할 수도 있습니다. 다음은 Visual C++ 6.0에서 컴파일되고 전달되는 매개변수 테이블을 계산하는 데 사용되는 C 언어 서브루틴입니다.

#include

unsigned long int crc32_table[256]

unsigned long int ulPolynomial = 0x04c11db7; unsigned long int Reflect(unsigned long int ref, char ch)

{ unsigned long int value(0)

//bit0과 bit7, bit1과 bit6 등을 교환합니다.

p>

for(int i = 1; i < (ch + 1); i++)

{ if(ref & 1)

value |= 1 << ( ch - i);

ref >>= 1; }

반환 값

}

init_crc32_table( )

{ unsigned long int crc,temp;

// 256개 값 ​​

for(int i = 0; i <= 0xFF; i++)

{ temp=Reflect(i, 8);

crc32_table[i]= 임시 << 24

for (int j = 0; j < 8; j++){

부호 없는 long int t1,t2;

unsigned long int flag=crc32_table[i]&0x80000000; ] << 1) ;

if(flag==0)

t2=0

else

t2=ulPolynomial;

crc32_table[i] =t1^t2; }

crc=crc32_table[i]

crc32_table[i] = Reflect(crc32_table[i], 32)

p>

}

}

copyright 2024대출자문플랫폼