描述:
接收卫星数据(各数据每秒一次):$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<CR><LF>
等等格式...我要对接收到的数据显示并对第一种数据$GPGGA..进行提取,
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG i=0,length=0;
BYTE data[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
memset(data,0,2048);
//CString strtemp;
switch(m_Comm.GetCommEvent())
{
case 1: // comEvSend发送数据
break;
case 2: // comEvReceive读取数据
// MessageBox(_T("读取数据事件"), _T("TRACE"), MB_OK);
variant_inp=m_Comm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
length=safearray_inp.GetOneDimSize(); //得到有效数据长度
// 接受数据
UpdateData(true);
for(i=0;i<length;i++) //
{
safearray_inp.GetElement(&i,data+i); //转换为BYTE型数组
BYTE bt=*(char*)(data+i); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_Message+=data[i]; //所有数据显示在对话框“信息显示框”中 ------数据正常
}
for(i=0;i<length;i++)
{
if((data[i]=='$')&&(data[i+3]=='G')&&(data[i+4]=='G')&&(data[i+5]=='A')) //判断是否GPGGA语句
{
//.....下面将$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>中每项内容分别提取,分别显示,但SetRThreshold(1)时提取不到信息,SetRThreshold(70)有时显示,但有时隔一秒跳动一次(比如应该显示123456,但下秒可能显示1234或123,好像接收的数据从这里断开似的)
请问高手该怎么处理?