我在解析NMEA字符串时遇到一些麻烦。有时我有数据,但有时没有。当我没有时,我有2个空插槽。函数strtok
会忽略该位置。
这是我的代码:
#include <stdlib.h>
#include <stdint.h>
#define NUM_SUBSTRINGS 13
struct nmea_parse {
char sentence[7];
uint16_t timestamp;
char *validity;
float latitude;
char ns;
float longitude;
char ew;
float speed; //in knots
uint16_t course;
uint16_t datestamp;
uint16_t variation;
uint16_t ew2;
uint16_t checksum;
}nmea;
void decodeGPSNMEA(char *);
int main() {
char str1[] = "$GPRMC,030742.00,A,2232.73830,N,11404.58520,E,0.356,,070314,,,A*A2"; //"$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A";//
decodeGPSNMEA(str1);
printf("\nValidity: %s Latitud: %.2f Longitude: %.2f Speed: %.2f Checksum: 0x%X\n\r", nmea.validity, nmea.latitude, nmea.longitude, nmea.speed, nmea.checksum);
return 0;
}
void decodeGPSNMEA(char *str2) {
char numb_chek[3];
char *p, *input[NUM_SUBSTRINGS], i;
p = strtok(str2, ",");
for (i = 0; i < NUM_SUBSTRINGS; i++) {
input[i] = p;
p = strtok(NULL, ",");
}
nmea.validity = input[2];
nmea.latitude = atof(input[3]);
nmea.longitude = atof(input[5]);
nmea.speed = atof(input[7])*1.852;
nmea.checksum = (int) strtol(input[9] + 2, NULL, 16);
printf("Hexa: %X", nmea.checksum);
for (i = 0; i < NUM_SUBSTRINGS; i++)
printf("\n%d - %s", i, input[i]);
}
校验和应该在第12位,在第9位。 NMEA GPRMC始终有13个子字符串,我需要尊重他的位置。
我需要知道如何解决此问题?不要使用strsep或其他任何东西...