Среда, 11 декабря 2019

crc 16 계산 예제

115

예를 들어 입력 데이터 0x25 = 0010 0101은 0*x7 + 0*x6 + 1*x5 + 0*x4 + 0*x3 + 1*x2 + 0*x1 + 1*x0로 촬영됩니다. 알고리즘은 각 단계의 제수 바로 위에 있는 비트에 대해 작동합니다. 이 반복의 결과는 다항식 제수의 비트xOR이며 그 위에 비트가 있습니다. 제수 위에 있지 않은 비트는 해당 단계에 대해 바로 아래에 복사됩니다. 그런 다음 제수는 오른쪽으로 한 비트를 이동하고 제수자가 입력 행의 오른쪽 끝에 도달할 때까지 프로세스가 반복됩니다. 다음은 전체 계산입니다: 입력 데이터 M(x) * xn이 숫자 195이고 제수 G(x)가 29라고 가정합니다. 우리는 계산 할 것이다 : 195 / 29 = 6 나머지 21 (사이드 노트 1). 이는 195 = 29 * 6 + 21 (M(x) * xn = G(x) * Q(x) + R(x))과 동일합니다. 따라서 CRC 값 R(x)은 21입니다. 첫 번째 확인 앱(CRC는 입력 데이터에 별도로 전송됨): 발신자는 CRC 값 21과 함께 입력 데이터(195)를 전송합니다.

그런 다음 수신기는 입력 데이터를 취하고 동일한 계산을 수행합니다 (생성기 다항식은 송신기 및 수신기에 의해 고정되고 정적으로 알려져 있음): 195 % 29 = 21. 계산된 나머지는 수신된 잔과 동일하므로 데이터 전송에 결함이 없습니다. 두 번째 확인 방법(CRC이 입력 데이터에 추가됨): CRC 값은 학교 에서 빼기하는 입력 데이터에 추가됩니다. 따라서 CRC 값(21)은 입력 데이터(195)에서 빼면 174 (= M(x) * xn — R(x))이 생성됩니다. 수신기는 174 % 29 = 0을 수행하므로 나머지는 0이고 데이터 전송에 결함이 없습니다. 바이트에 의한 실제 바이트는 조금 까다롭기 때문에 먼저 예제를 다시 확인해 보겠습니다: 이 정보를 사용하면 일반 계산과 비교하여 상호 CRC-32(오른쪽)의 테이블 기반 계산(왼쪽): MSB-TO-LSB와 두 가지 변종이 있다는 사실 LSB-대 MSB는 종종 혼란을 일으킵니다. 예를 들어, 동일한 CRC 인스턴스에 대해 두 개의 서로 다른 조회 테이블이 그물에서 발견되는 이유입니다: 다항식 0x04c11db7을 가진 잘 알려진 표준 CRC-32 인스턴스(예: PKZIP)의 경우 0x00000000값으로 시작하는 조회 테이블을 찾을 수 있습니다. 0x04C11DB7, 0x0000000 및 0x77073096을 가진 다른 하나. 첫 번째는 이 문서에서 설명하는 알고리즘에 해당하고 두 번째 알고리즘은 계수가 반영되는 상호 변형에 해당합니다.

CRC-32 조회 테이블의 `상호 변형`과 비교하여 `일반` CRC-32 조회 테이블에 대한 계산을 기억해 보겠습니다. 상단의 펜 및 용지 접근 방식과 같이 CRC 계산 비트를 비트별로 수행할 때 shift 레지스터의 초기 값은 무엇을 의미합니까? 답변: 주어진 특정 초기 값은 첫 번째 입력 바이트(CRC-8: 1 입력 바이트, CRC-16: 2입력 바이트, CRC-32: 4 입력 바이트, …)로 xored되어야 합니다.