gpsframe.cpp

来自「一个通讯管理机的源代码。比较好用。推荐」· C++ 代码 · 共 77 行

CPP
77
字号
#include "gpsframe.h"WORD BTI(WORD wBCD){	WORD wRet = (wBCD&0xf)+((wBCD&0xf0)>>4)*10;	wBCD >>= 8;	wRet += 100*(wBCD&0xf)+((wBCD&0xf0)>>4)*1000;	return wRet;}BYTE BTI(BYTE byBCD){	BYTE byRet = (byBCD&0xf)+((byBCD&0xf0)>>4)*10;	return byRet;}void CGpsFrame::FrameToBuf(CFrameNode& fn){	fn.m_byCID = 0;	fn.m_bySrcAddr = 0;	fn.m_wSize = 7;	fn.SetSize(fn.m_wSize);	memcpy(fn.m_pbyData,m_pData,fn.m_wSize);}bool CGpsFrame::BufferToFrame(CDQue* pPhyDQ){	Reset();	CDataNode *pDN = NULL;	bool bRet = false;	while (pPhyDQ->Get(pDN,50) && pDN)	{		if (m_wInLength + pDN->m_wSize > 17)		{			delete pDN;			break;		}		memcpy(&m_pbyInBuf[m_wInLength],pDN->m_pbyData,pDN->m_wSize);		m_wInLength += pDN->m_wSize;/*	for (WORD bbb=0; bbb< pDN->m_wSize; bbb++)	{		char c[16];		sprintf(c,"%02x ",pDN->m_pbyData[bbb]);		cout << c;		if ((bbb+1)%64 == 0) cout << endl;	}	cout <<endl;*/		delete pDN;		if (m_wInLength && (m_pbyInBuf[0] != 0x42))			break;		if (m_wInLength==GetEchoLen())		{			if (m_pbyInBuf[16] == 0xd)				bRet = true;			break;		}	}	if (bRet)	{		m_pData[0] = BTI(m_pbyInBuf[1]);		m_pData[1] = BTI(m_pbyInBuf[2]);		m_pData[2] = BTI(m_pbyInBuf[3]);		WORD* pw,* pw1;		pw = (WORD *)&m_pData[3];		pw1 = (WORD *)&m_pbyInBuf[4];		WORD wv = *pw1;		wv = CW(wv);		*pw = BTI(wv);		m_pData[5] = BTI(m_pbyInBuf[6]);		m_pData[6] = BTI(m_pbyInBuf[7]);		m_wLength = 7;	}	return bRet;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?