본문 바로가기

개발자 모드/C언어

C언어 해양 [NMEA] GPS Checksum 계산

728x90
#include<stdio.h>


int main()

{
	char GPRMCBuf[] ={
		// checksum calculation starts with the next byte (0x47)
		0x47, 0x50, 0x52, 0x4D, 0x43, 0x2C, 0x31, 0x35,        // GPRMC,15
		0x30, 0x35, 0x32, 0x30, 0x2E, 0x30, 0x30, 0x30, 0x2C,  // 0520.000,
		0x41, 0x2C, 0x34, 0x31, 0x32, 0x31, 0x2E, 0x37, 0x39,  // A,4121.79
		0x37, 0x37, 0x2C, 0x4E, 0x2C, 0x30, 0x30, 0x32, 0x31,  // 77,N,0021
		0x30, 0x2E, 0x39, 0x36, 0x36, 0x37, 0x2C, 0x45, 0x2C,  // 0.9667,E,
		0x31, 0x2E, 0x35, 0x30, 0x2C, 0x35, 0x38, 0x2E, 0x32,  // 1.50,58.2
		0x39, 0x2C, 0x32, 0x33, 0x30, 0x37, 0x31, 0x35, 0x2C,  // 9,230715,
		0x2C, 0x2C, 0x41,                                      // ,,A
		// checksum calculation ends here
	};


	unsigned short chk=0;
	int len=sizeof(GPRMCBuf);
	for(int i=0; i<len; i++)
	{
		chk ^=GPRMCBuf[i];
	}


	return chk;  0x35 0x38  --> 0x58로 나옴


}

 

결과의 코드는

 

0x2A, // The '*' character, i.e. message/checksum delimiter

0x35, 0x38, // The checksum, '5' and '8', so the checksum is 0x58

 

로 표현해서 메세지를 보낼수 있다

728x90