본문 바로가기

Languages/c#

[C#] CRC 계산 예제

728x90
반응형

 CRC는 주로 RS232 관련 통신을 하다보면 데이터를 송신해주는 센서측의 Firmware에서 송신한 데이터의 끝에 CRC(Checksum) Hexcode를 00 이런식으로 보내준다. 

 물론 제조사별로 Firmware에서 사용하는 계산방식이 다르긴한데 일반적인경우는 아래 CRC 계산방법을 사용한다. 

        public string CRC(string sTmpMsg)
        {
            byte[] convertArr = new byte[(sTmpMsg.Length) / 2];
            for (int i = 0; i < convertArr.Length; i++)
            {
                convertArr[i] = Convert.ToByte(sTmpMsg.Substring(i * 2, 2), 16);
            }
            //Variable with result of your calculation.
            int checksum = 0;
            //Step1: Add byte values.            
            foreach (byte value in convertArr)
            {
                checksum += value;
            }
            checksum = 256 - checksum;
            checksum &= 0xFF; // FFFFFF replace
            return checksum.ToString("X2");
        }

전체 수신한 바이트에서 CRC부분 제외하고 수신된 데이터를 인자로 넘겨주면 CRC를 리턴해준다. 

실제받은 데이터의 끝부분의 CRC와 계산한 CRC를 비교해서 수신한 데이터가 정상인지 확인하면 된다.

728x90
반응형