본문 바로가기

공부/C언어

28. CRC-16 예제

반응형

소스

#include <stdio.h>

unsigned int crc16(char* msg,unsigned int len)
{
	int crc_val = (*msg) ^ 0xffff;
	char HI_crc = 0;
	char LO_crc = 0;
	
	int i, j = 0;

	for (i = 0; i < len; i++) {
		if(i==0)	crc_val = (*msg) ^ 0xffff;
		else {
			msg++;
			crc_val = crc_val ^ (*msg);
		}
		//printf("%x\n", crc_val);
		for (j = 0; j < 8; j++) {
			if (crc_val & 0x0001) {
				crc_val = (crc_val>>1) ^ 0xA001;
				//printf("P1:%x\n", crc_val);
			}
			else {
				crc_val = crc_val >> 1;
				//printf("P2:%x\n", crc_val);
			}
		}
		
	}
	HI_crc = crc_val;
	LO_crc = crc_val >> 8;
	crc_val = (HI_crc << 8) + LO_crc;
	printf("%x\n", crc_val);
}

void main(void)
{
	char test_data[6] = {0x01, 0x03, 0x00, 0x02, 0x00, 0x02};
	
	
	//printf("0x%x", test_data[0]);
	crc16(&test_data, 6);
}

crc 알고리즘 같은 경우

초기값과 기준값에 따라서 달리진다.

저 같은 경우엔 CRC-16 (Modbus) 계산 방식입니다.

 

https://www.lammertbies.nl/comm/info/crc-calculation?crc=8005&method=hex

 

On-line CRC calculation and free library - Lammert Bies

On-line CRC calculation sheet. Free CRC routines downloadable. Covers CRC-16, CRC-32, CRC-CCITT, DNP, Sick and other routines.

www.lammertbies.nl

결과

반응형

'공부 > C언어' 카테고리의 다른 글

29. union 메모리 분할 하기  (0) 2021.07.13
Visual studio 콘솔 창 유지 하기  (0) 2021.07.13
27. 구조체 와 함수  (0) 2020.02.04
26. static 구조체  (0) 2019.07.26
25. 구조체_구조체 함수_구조체 포인트  (0) 2019.07.26