用Winsocket接收到的经过BCD编码的16进制标识的GPS数据流。小弟我怎么从中提取gps数据的速度,经纬度?

用Winsocket接收到的经过BCD编码的16进制标识的GPS数据流。我如何从中提取gps数据的速度,经纬度??
用Winsocket接收到的经过BCD编码的16进制标识的GPS数据流。我如何从中提取gps数据的速度,经纬度??

------解决方案--------------------
这类问题,要是没有说明书,真的不好回答啊。
------解决方案--------------------
首先要了解BCD编码,会编码和解码 BCD编码将一个字节的8个位拆分成高4位和低4位两个部分,也就是说一个字节能存储两个数字。所以BCD的编码过程就是将数字压缩的过程,将两个字节的数字压缩成一个字节。反之,解码就是把一个字节的数字拆分为两个数字单独存放(大部分的处理都是按字节处理的)。 

如果你收到的是BCD编码后的数据流,就解码,然后取数据
------解决方案--------------------
不需要瞭解NMEA 0183通訊協定的全部資訊,僅需要從中挑選出我們需要的那部分定位資料。其餘的資訊我們忽略掉。
如果此時和衛星的通訊正常的話,可以接收到的資料格式樣如下:
$GPRMC,204700,A,3403.868,N,11709.432,W,001.9,336.9,170698,013.6,E*6E
資料說明如下:

$GPRMC:代表GPS推薦的最短數據 

204700: UTC_TIME 24小時制的標準時間,按照小時/分鐘/秒的格式 

A: A 或者 V A表示資料"OK",V表示一個警告 

3403.868: LAT 緯度值,精確到小數點前4位,後3位
N LAT_DIR N表示北緯,S表示南緯 

11709.432: LON 經度值,精確到小數點前5位,後3位
W LON_DIR W表示西經,E表示東經 

如果當前沒有和衛星取得聯繫,那麼字串的格式為:
  $GPRMC,UTC_TIME,V,...
  下面是一個例子:
  $GPRMC,204149,V,,,,,,,170698,,*3A
2004-12-25








C/C++ code
#ifndef __GPS_H__
     #define __GPS_H__
     typedef struct tagGPRMC
     {
         char time[20];
         char statu[5];
         char latitude[20];
         char southornorth[5];
         char longitude[20];
         char eastorwest[5];
         char high[10];
         char director[10];
         char date[20];
         char magic[10];
         char magicdirtor[5];
     }GPRMCHead, * LP_GPRMC_Head;
     
     typedef struct tagGPGSA
     {
         char mode[5];
        char currentState[5];
        char PRN01[5];
        char PRN02[5];
        char PRN03[5];        
        char PRN04[5];
        char PRN05[5];
        char PRN06[5];
        char PRN07[5];
        char PRN08[5];
        char PRN09[5];        
        char PRN10[5];
        char PRN11[5];
        char PRN12[5];
        char pdop[10];
        char vdop[10];
        char hdop[10];
        char endvalue[50];
     }GPGSAHead, *LP_GPGSA_Head;

      typedef struct tagGPGSV
      {
          char totalnum[5];
        char currentnum[5];
        char totalstar[5];
        char PRV01[5];
        char elevation01[10];
        char depression01[10];
        char noise01[10];
        char PRV02[5];
        char elevation02[10];
        char depression02[10];
        char noise02[10];
        char PRV03[5];
        char elevation03[10];
        char depression03[10];
        char noise03[10];
        char PRV04[5];
        char elevation04[10];
        char depression04[10];
        char noise04[10];        
        char endvalue[10];
      }GPGSVHead, *LP_GPGSV_Head;

     void showMessage(char message[]);
     void getGPSPort(char backstr[]); 
     void setCOMPortPrj(void);
     void getNextChar(int length, char backstr[]);
     void getString(char strChar[]);
     void checkNULL();
     void getStringEnd(char stopcn, char backstr[]);
     void getBetweenChar(char input[], char backstr[], char stopcn);
     void getSystemTime(char stime[], char sdate[]);
     
     void gpsALM();
     void gpsPGRMI();
     void gpsGPALM();
     void gpsPGRMO();
     void gpsGPLM();
     void gpsGPGGA();
     void gpsGPGSA();
     void gpsGPGSV();
     void gpsGPRMC();
     void gpsGPVTG();
     void gpsLCGLL();
     void gpsLCVTG();
     void gpsPGRME();
     void gpsPGRMT();
     void showPass();
     
     
     int sendComData(char message[]);
     int getComData(char message[]); 
     

#endif

------解决方案--------------------
楼上你得说具体协议,比如从哪一字节开始是时间