crc 예제

(Last Updated On: August 1, 2019)

이는 후행 각 0비트가 x의 계수를 추가한다는 사실 때문입니다. 다항식 Xn + xn-1 + … + x1 + x0이 있다고 가정 해 봅시다. x* (xn + xn-1 + + + x1 + x0) = xn +1 + xn + + + x1을 곱하여 x를 곱하면 다항식의 정도가 1로 증가하여 오른쪽에 0을 더하면 됩니다. 어쩌면 이것은 예를 통해 더 명확해집니다: 불행히도, 그렇지 않습니다. 위의 예제는 0x2A 및 0xE0의 두 가지 CRC 값을 제공합니다. 즉, 주어진 특정 초기 값으로 초기 값을 초기화한 다음 CRC 알고리즘을 시작하는 것만으로는 충분하지 않습니다. 이는 초기 값 0에서만 작동합니다. 간단한 (비 조회 테이블, 하지만 바이트 현명한 처리) CRC-8 구현을 보면, 우리는 이유를 참조: 이 예제에서는, 우리는 3 비트 CRC와 메시지의 14 비트를 인코딩 한다, 다항식 x3 + x + 1. 다항식은 계수로 이진으로 작성됩니다. 3도 다항식에는 4개의 계수가 있습니다(1×3 + 0x2 + 1x + 1). 이 경우 계수는 1, 0, 1 및 1입니다. 계산 결과는 3비트 길이입니다.

다항식의 분할은 정수 분할과 다릅니다. 자세히 설명하지 않고 CRC 계산에 사용되는 기본 귀족은 XOR(Exclusive-OR) 작업을 기반으로 합니다(곧 예제를 볼 예정입니다!). – 분할은 전체 입력 데이터(이진 스트림으로 해석)입니다. – 생성기 다항식이라고도 하는 제수는 사용된 CRC 알고리즘에 의해 정적으로 정의됩니다. CRC-n (n+1) 비트가 있는 고정 정의된 생성기 폴리놈을 사용합니다. – CRC 체크섬 값은 분할 % 제수로 정의됩니다. 수동 계산의 경우 실제 CRC 계산(다항식 분할)이 계산되기 전에 n 0 비트가 입력 데이터에 추가됩니다. 예제 CRC 계산을 수행해 보겠습니다: 다항식 표현에만 영향을 미칩니다. 그러나 요점은 각각의 경우에 동일한 다항식계산에 사용된다는 것입니다. 자주 사용되는 CRC-16 다항식 x^16 + x^12 + x^5 + 1을 고려하십시오.

바이너리에서, 그건 1 0001 0000 0010 0001. 이 예제에 대한 세 가지 다른 표현: CRC-8, CRC-16 및 CRC-32 케이스에 대한 시프트 레지스터를 초기화하는 방법, 그리고 CRC-32에 대한 해당 예제 시프트 레지스터 알고리즘이 뒤따릅니다. 이것은 문서의 맨 위에 링크 된 C # 소스 패키지에서 가져온 것입니다 : 지금까지 알고리즘은 조금씩 작동하므로 매우 비효율적입니다. 더 큰 입력 데이터의 경우 속도가 매우 느릴 수 있습니다. 그러나 CRC-8 알고리즘을 어떻게 가속화할 수 있을까요? divident는 현재 crc 바이트 값이며 바이트는 256개의 다른 값만 사용할 수 있습니다. 다항식(= 제수)이 고정됩니다. 고정 된 다항식으로 가능한 각 바이트에 대한 분할을 미리 계산하고 이러한 결과를 조회 테이블에 저장하는 것은 어떨까요? 나머지는 항상 동일한 분할 및 제수에 대해 동일하기 때문에 가능합니다! 그런 다음 입력 스트림을 비트별로 처리하지 않고 바이트별로 처리할 수 있습니다. 일반적인 예제를 사용하여 프로세스를 수동으로 보여 드리겠습니다. 구현은 위의 예에서 시프트 레지스터 프로세스에 매우 밀접하게 유지됩니다. CRC-8 알고리즘은 실제로 9비트 생성기 폴리놈을 사용하지만 알고리즘에서 이러한 정렬되지 않은 값을 추적하는 것은 번거로울 수 있습니다.

다행히도 이전 장에서 설명한 것처럼 가장 중요한 비트를 폐기할 수 있습니다. 첫째, 항상 1입니다. 둘째, 제수는 항상 이 선행 `1`이 구분의 다음 `1`과 정렬되는 방식으로 정렬되므로 이 비트의 XOR 결과는 항상 0입니다.

Rick

After many years of being a full time freelance writer, and a long time resident of this state, I've decided to turn my full attention toward California by exploring all that it has to offer. My goal is to inspire you to get out there and explore this amazing state. Please follow my adventures and news content by visiting Calexplornia daily or clicking on one of my Social Media accounts below.