C - Strsep () возвращает 0 с отрицательными значениями - PullRequest
1 голос
/ 05 мая 2020

Я работаю в проекте, который использует данные GPS. Я пытаюсь получить все данные, но у меня было много проблем. Я получаю следующую информацию:

+CGNSINF: <GNSS run status>,<Fix status >,<UTC date &
Time>,<Latitude>,<Longitude>,<MSLAltitude>,<SpeedOverGround>,
<CourseOverGround>,<FixMode>,<Reserved1>,<HDOP>,<PDOP>,<VDOP>,<Reserved2>,
<GNSSSatellites in View>,<GPS Satellites Used>,
<GLONASS SatellitesUsed>,<Reserved3>,<C/N0 max>,<HPA>,<VPA>

Я решил использовать strsep, потому что он работает с пустыми полями данных GPS. С помощью strsep я могу правильно получить данные, если они положительные. В моем случае широта отрицательная, и с помощью strsep я получаю значение 0.

Код, который я сделал, чтобы получить данные, которые мне нужны:


char *string = aux_str_gps;
char *token;
int  counter = 0;

float  gps_date;
float  latitude;
float  longitude;
float  altitude;
float  speed;
float  COG; //course over ground in degrees
float  HDOP;
int    GNSS_sat_used; //numer of GNSS satellites used

while ((token = strsep(&string, ",")) != NULL){
        switch (counter){
        case 2: 
            sscanf(token, "%f", &gps_date);
            write_gps_date(gps_date);
            counter ++;
            break;
        case 3: 
            sscanf(token, "%f", &latitude);
            write_gps_lat(latitude);
            counter ++;
            break;
        case 4: 
            sscanf(token, "%f", &longitude);
            write_gps_long(longitude);
            counter ++;
            break;
        case 5: 
            sscanf(token, "%f", &altitude);
            write_gps_alt(altitude);
            counter ++;
            break;
        case 6: 
            sscanf(token, "%f", &speed);
            write_gps_speed(speed);
            counter ++;
            break;
        case 7: 
            sscanf(token, "%f", &COG);
            write_gps_COG(COG);
            counter ++;
            break;
        case 10: 
            sscanf(token, "%f", &HDOP);
            write_gps_HDOP(HDOP);
            counter ++;
            break;
        case 15: 
            sscanf(token, "%d", &GNSS_sat_used);
            write_gps_GNSS_used(GNSS_sat_used);
            counter ++;
            break;
        default: 
            counter ++;
        }
    }

Если у вас есть какие-либо предложения, мы приветствуем их.

...