本着互相交流、学习的宗旨请指点,共同进步
//被调函数已定义
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;}