本着互相交流、学习的宗旨请指点,共同进步
//被调函数已定义
CString CRPositionApp::Str10(LPCTSTR Status)
{
//进制转换(10进制>52进制)
double Bchushu,Temp_shan;
int Temp_yu,Chushu,long_str,i;
CString Str10; Str10="";
Bchushu=atof(Status); //转换设备状态为double型
Chushu=52;
Temp_shan=52;
while(Temp_shan>0)
{
Temp_shan=Bchushu / Chushu; //求商
modf(Temp_shan,&Temp_shan); //取商的整数部份
Temp_yu=int(Bchushu-Chushu*Temp_shan); //求余
Str10=CString(Str52(Temp_yu))+Str10; //转换余数为52进制
Bchushu=Temp_shan; //商作为新被除数
}
long_str=Str10.GetLength();
if(long_str<7)
{
for(i=0;i<7-long_str;i++)
{
Str10="a"+Str10;
}
}
return Str10;
}//
调用函数的函数CString Pr(CString Kx_Pr)//对应奥星指令PositionResponse
{
//以下这条指令处理PositionResponse
CString Temp_Zd,Temp_Gt,Temp_Mt,Temp_Lon,Temp_Lat,Temp_Flag,Temp,Temp_52,Ox_Pr;
CString Temp_Speed,Temp_Dir,Temp_SatNum,Temp_SatSerial,Temp_Status,Str_Error,Msg1;
int start,end,Rcount,i,Num_Status;
CTime m_time,Mtime;
//*P,Initiative,Gtime,aaaaaaaaooooooooo,Flag,Speed,Dir,Status#
Msg1="*P,F,2001-11-8 14:20:3,223268761140476346,6,87,0,3,010203,1000100210063010301230141#"; //判断是否为科星回传指令(*P....#)
Str_Error="";
start=Msg1.Find("*P",0);
if(start==-1)
{
Str_Error="对不起,回传命令不是*P....#";
} //取Initiative值,开始位置:第一个","号之后
start=Msg1.Find(",",0);
end=Msg1.Find(",",start+1);
Temp_Zd=Msg1.Mid(start+1,(end-start-1)); //取GTime时间,开始位置:Initiative(即第二个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_Gt=Msg1.Mid(start+1,(end-start-1)); //取MTime时间(Kx指令中无相应信息,取系统时间)
Temp_Mt+="";
m_time = CTime::GetCurrentTime();
//格式化输出系统时期和时间(yyyy-mm-dd HH:mm:ss)
Temp_Mt=m_time.Format("%Y-%m-%d %H:%M:%S");
//Temp_Mt=m_time.Format(_T("%x")); //取系统日期
//m_time=CTime::GetCurrentTime();
//Temp_Mt+=" ";
//Temp_Mt+=m_time.Format(_T("%X")); //取系统时间 //取经纬度,开始位置:GTime时间(即第三个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp=Msg1.Mid(start+1,(end-start-1));
Temp_Lat=Temp.Mid(0,8); //纬度,四位整数四位小数
Temp_Lon=Temp.Mid(8,9); //经度,五位整数四位小数 //取经纬度标志,开始位置:经纬度(即第四个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_Flag=Msg1.Mid(start+1,(end-start-1)); //取行车速度,开始位置:经纬度标志(即第五个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_Speed=Msg1.Mid(start+1,(end-start-1));
//取行车方向,开始位置:行车速度(即第六个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_Dir=Msg1.Mid(start+1,(end-start-1)); //取定位星数,开始位置:行车方向(即第七个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_SatNum=Msg1.Mid(start+1,(end-start-1)); //取定位星ID,开始位置:定位星数(即第八个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_SatSerial=Msg1.Mid(start+1,(end-start-1)); //取设备状态,开始位置:定位星ID(即第九个",")值之后
start=end;
end=Msg1.Find(",",start+1);
//因为设备状态已是最后一个参数,故未尾标志为:#
if(end=-1) end=Msg1.Find("#",start+1);
Temp_Status=Msg1.Mid(start+1,(end-start-1));
Rcount=Temp_Status.GetLength();
Temp_52="";
if(Rcount>12)
{
Num_Status=Rcount % 12; //判断有几组状态(每组12位、三类状态)
if(Num_Status > 0)
{
Num_Status=((Rcount-Num_Status) / 12) +1;
}
else
{
Num_Status=Rcount / 12;
} for(i=0;i<Num_Status;i++)
{
Temp=Temp_Status.Mid(i*12,12);
Temp_52+=Str10(Temp);//*****此处出错
}
Temp_Status=Temp_52;
}
else
{
Temp_Status=Str10(Temp_Status);
}
return Ox_Pr;}
//被调函数已定义
CString CRPositionApp::Str10(LPCTSTR Status)
{
//进制转换(10进制>52进制)
double Bchushu,Temp_shan;
int Temp_yu,Chushu,long_str,i;
CString Str10; Str10="";
Bchushu=atof(Status); //转换设备状态为double型
Chushu=52;
Temp_shan=52;
while(Temp_shan>0)
{
Temp_shan=Bchushu / Chushu; //求商
modf(Temp_shan,&Temp_shan); //取商的整数部份
Temp_yu=int(Bchushu-Chushu*Temp_shan); //求余
Str10=CString(Str52(Temp_yu))+Str10; //转换余数为52进制
Bchushu=Temp_shan; //商作为新被除数
}
long_str=Str10.GetLength();
if(long_str<7)
{
for(i=0;i<7-long_str;i++)
{
Str10="a"+Str10;
}
}
return Str10;
}//
调用函数的函数CString Pr(CString Kx_Pr)//对应奥星指令PositionResponse
{
//以下这条指令处理PositionResponse
CString Temp_Zd,Temp_Gt,Temp_Mt,Temp_Lon,Temp_Lat,Temp_Flag,Temp,Temp_52,Ox_Pr;
CString Temp_Speed,Temp_Dir,Temp_SatNum,Temp_SatSerial,Temp_Status,Str_Error,Msg1;
int start,end,Rcount,i,Num_Status;
CTime m_time,Mtime;
//*P,Initiative,Gtime,aaaaaaaaooooooooo,Flag,Speed,Dir,Status#
Msg1="*P,F,2001-11-8 14:20:3,223268761140476346,6,87,0,3,010203,1000100210063010301230141#"; //判断是否为科星回传指令(*P....#)
Str_Error="";
start=Msg1.Find("*P",0);
if(start==-1)
{
Str_Error="对不起,回传命令不是*P....#";
} //取Initiative值,开始位置:第一个","号之后
start=Msg1.Find(",",0);
end=Msg1.Find(",",start+1);
Temp_Zd=Msg1.Mid(start+1,(end-start-1)); //取GTime时间,开始位置:Initiative(即第二个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_Gt=Msg1.Mid(start+1,(end-start-1)); //取MTime时间(Kx指令中无相应信息,取系统时间)
Temp_Mt+="";
m_time = CTime::GetCurrentTime();
//格式化输出系统时期和时间(yyyy-mm-dd HH:mm:ss)
Temp_Mt=m_time.Format("%Y-%m-%d %H:%M:%S");
//Temp_Mt=m_time.Format(_T("%x")); //取系统日期
//m_time=CTime::GetCurrentTime();
//Temp_Mt+=" ";
//Temp_Mt+=m_time.Format(_T("%X")); //取系统时间 //取经纬度,开始位置:GTime时间(即第三个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp=Msg1.Mid(start+1,(end-start-1));
Temp_Lat=Temp.Mid(0,8); //纬度,四位整数四位小数
Temp_Lon=Temp.Mid(8,9); //经度,五位整数四位小数 //取经纬度标志,开始位置:经纬度(即第四个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_Flag=Msg1.Mid(start+1,(end-start-1)); //取行车速度,开始位置:经纬度标志(即第五个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_Speed=Msg1.Mid(start+1,(end-start-1));
//取行车方向,开始位置:行车速度(即第六个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_Dir=Msg1.Mid(start+1,(end-start-1)); //取定位星数,开始位置:行车方向(即第七个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_SatNum=Msg1.Mid(start+1,(end-start-1)); //取定位星ID,开始位置:定位星数(即第八个",")值之后
start=end;
end=Msg1.Find(",",start+1);
Temp_SatSerial=Msg1.Mid(start+1,(end-start-1)); //取设备状态,开始位置:定位星ID(即第九个",")值之后
start=end;
end=Msg1.Find(",",start+1);
//因为设备状态已是最后一个参数,故未尾标志为:#
if(end=-1) end=Msg1.Find("#",start+1);
Temp_Status=Msg1.Mid(start+1,(end-start-1));
Rcount=Temp_Status.GetLength();
Temp_52="";
if(Rcount>12)
{
Num_Status=Rcount % 12; //判断有几组状态(每组12位、三类状态)
if(Num_Status > 0)
{
Num_Status=((Rcount-Num_Status) / 12) +1;
}
else
{
Num_Status=Rcount / 12;
} for(i=0;i<Num_Status;i++)
{
Temp=Temp_Status.Mid(i*12,12);
Temp_52+=Str10(Temp);//*****此处出错
}
Temp_Status=Temp_52;
}
else
{
Temp_Status=Str10(Temp_Status);
}
return Ox_Pr;}
唯一出错的原因就是:
如果头文件未声明函数
则被调函数必须在调用函数之前