Parse GPS String for Time and Coordinates

Code

#include <stdio.h>
#include <string.h>
#include <stdint.h>

uint8_t readByteFromString(char *input, int start) {
    return (*(input + start) - '0') * 10 + (*(input + start + 1) - '0');
}

void parse_gprmc(char *nmea) {
    int i = 7;

    uint8_t hr = readByteFromString(nmea, 7);
    uint8_t mn = readByteFromString(nmea, 9);
    uint8_t sc = readByteFromString(nmea, 11);

    printf("Time: %02hhu:%02hhu:%02hhu\n", hr, mn, sc);

    nmea[24] = '\0';
    printf("Latitude: %s %c\n", (nmea + 16), *(nmea + 25));

    nmea[36] = '\0';

    printf("Longitude: %s %c\n", (nmea + 27), *(nmea + 37));
}

int main() {
    char nmea[100];
    fgets(nmea, sizeof(nmea), stdin);
    parse_gprmc(nmea);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

$GPRMC,123519,A,4807.038,N,01131.000,E

Expected Output

Time: 12:35:19 Latitude: 4807.038 N Longitude: 01131.000 E