• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:char型をfloat型に変換)

char型をfloat型に変換する方法とコード

このQ&Aのポイント
  • GPSからシリアルポートに流れてくるコンマ区切りのフォーマットをcharに格納し、トークンで切り分けてfloat型に変換する方法を説明します。
  • GPSデータの中に含まれる緯度や経度などの数値をfloat型に変換し、別の変数に格納する方法を示します。
  • Visual C++ 6.0を使用して、char型のGPSデータをfloat型に変換するためのコードを提供します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.1

間違った文字列が流れて来ない事が前提なら、atofが簡単かな。 double f = atof("123.456"); printf("%f\n", f);

g--san
質問者

お礼

ありがとうございます 無事できました

その他の回答 (2)

  • ency
  • ベストアンサー率39% (93/238)
回答No.3

この流れに乗って、strtod() なんてのもありますよね。 #include <stdlib.h> double strtod(const char *nptr, char **endptr); つまりこんな感じになりますかね。 double value; char* endptr; char string[] = "123.456abc"; …… value = strtod( string, &endptr ); printf( "value=%f, endptr=%s\n", value , endptr ); /* ⇒ [value=123.456000, endptr=abc] と表示 */ つまり、どこまで変換できたのかをチェックすることが可能な atod() とでも考えれば良いでしょう。 ちなみに、atod() や atof() とは、次のような関係があると考えれば良いでしょう。 value = atod( string ); ⇔ value = strtod( string, NULL ); value = atof( string ); ⇔ value = (float)strtod( string, NULL ); とりあえず、ご参考までに。。。

g--san
質問者

お礼

ありがとうございます

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

入力間違いがない前提ならsscanfが簡単じゃね? int ret; double time; ... ret = sscanf(szBuf, "$GPGGA,%f,...", &time,...); みたいな感じで。(例中...は省略) ただし、scanf系統の関数を使うときは、返値をちゃんとチェックすることとフォーマット文字列に合う変数のアドレスをちゃんと渡してやることに注意すること。 使い方の詳細はman scanfなど参照してくれ。

g--san
質問者

お礼

ありがとうございます

関連するQ&A