2012年7月26日木曜日

Cで度分形式を度に変換する

GPSから出力されるNMEAの度分形式を度に変換するコードです



  1. #include <stdio.h>
  2. void dm2d(const char *str, char *data) {
  3.     int cCnt = 0, i = 0;
  4.     int d = 0, m = 0, cm = 0, cmc = 0;
  5.     while(*(str + cCnt) != '.') { cCnt++; }
  6.     while(i < (cCnt - 2)) { d = (d * 10) + (*(str + i++) - '0'); }
  7.     while(i < (cCnt)) { m = (m * 10) + (*(str + i++) - '0'); }
  8.     i++;
  9.     while(*(str + i) != '\0')
  10.     { cm = (cm * 10) + (*(str + i++) - '0'); cmc++; }
  11.     sprintf(data, "%3d.%0*d", d, cmc + 1, (((m * 10000) + cm) * 10) / 60);
  12. }
  13. int main(void) {
  14.     char str[20];
  15.     char data[20];
  16.     scanf("%s", str);
  17.     dm2d(str, data);
  18.     printf("%s\n", data);
  19.     return(0);
  20. }

浮動小数点数を使っていないので標準的なprintf等を使わなくても簡単に出力できます

桁数が少ない等の問題はありますが
とりあえず正常に動いてるっぽいので置いておきます
気が向いたら度から度分秒に変換したり度分から度分秒に変換するコードも書くかも