Secreta

CRC (Cyclic Redundancy Check) C# 프로그램 본문

Engineering/Technique

CRC (Cyclic Redundancy Check) C# 프로그램

준♡ 2010. 6. 11. 15:57


Cyclic redundancy check ... 는 이전에도 포스팅을 했었지만 ...
이번 CRC 포스팅은 ... 그 추가분입니다 ... ;;

요즘 제 잉여 블로그의 방문자가 폭증한게 ... 지난번에 올린 CRC 소스 때문인 듯 싶더군요 ...
앞서 말씀드렸지만 ... ... 그 발로 짠 C 소스 ... ;;; ;;; 남한테 보이긴 창피한데 말이지요 ;; ;;;
어제 방문자가 폭증한걸 보고 ... 사태의 심각성(?)을 파악하고 나서야 ..
긴급히 제대로 된 포스팅이 필요하다는걸 느꼈다죠 ;;; ;;;


일단 ... CRC 계산은 다음과 같이 합니다 ...
(http://en.wikipedia.org/wiki/Cyclic_redundancy_check 를 참고하세요)

11010011101100 <--- input
10110000000000 <--- divisor (4 bits)
--------------
01100011101100 <--- result

00000000001110 <--- result of previous step
00000000001011 <--- divisor
--------------
00000000000101 <--- remainder (3 bits)

다음은 이 CRC를 C#으로 프로그래밍하면 ... ...

class CRC_Cs {

    static void Main(string[] args)

    {

                  Polynomial ShiftReg        = new Polynomial("11010011101100");

                  Polynomial Poly            = new Polynomial("1011");

 

                  int      nCnt = ShiftReg.getString().Length - Poly.getString().Length + 1;

 

                  for(int i=0; i<nCnt; i++) {

 

                           if(ShiftReg.getChar(0) == '1') {

                                   ShiftReg = (ShiftReg ^ Poly) << 1;

                           } else {

                                   ShiftReg = ShiftReg << 1;

                           }

                  }

 

                  Console.WriteLine(ShiftReg.getString());

    }

}

와 같이 할 수 있으며 ...

사용한 Polynomial class는 ... ... 제가 임의로 만든겁니다 ;;
Polynomial class는 ... 아래와 같습니다 ...


대충 Wikipedia에 나온 대로 구현은 했는데 ... ... 아마도 맞을겁니다 .. 아마도요;;;
게다가 급히 만드느라 ... 코드도 엉망이군요 ;;;;;;
본인이 싸지른 글에 대한 투철한 A/S 정신 'ㅂ'v
2 Comments
댓글쓰기 폼