![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
GPSからシリアルポートに流れてくるコンマ区切りのフォーマットをいったんcharにいれて、トークンでぶちぶち切って、違う変数に格納したいです。
流れてくるデータは、
$GPGGA,042449.00,3449.30669291,N,13531.38645000,E,1,4,4.4,81.885,M,34.255,M,,*6D
のような数値です。緯度経度や日付等のデータです。
緯度や経度の数値をfloatやdoubleに変換して変数に格納したいのですが、どうしたらよいでしょうか?
そのまましたらエラーが出てしまいます。
以下は数値をブチブチ切って表示させるプログラムです。
#include <windows.h>
#include <stdio.h>
int main(void)
{
char szSend[] = "$GPGGA,000000.00,0000.00000000,N,00000.00000000,E,0,0,0.0,00.000,M,00.000,M,,*00";
char szBuf[sizeof(szSend)]="$GPGGA,042449.00,3449.30669291,N,13531.38645000,E,1,4,4.4,81.885,M,34.255,M,,*6D";
char *ptr;
ptr=strtok(szBuf,",");
printf("%s\n",ptr);//$GPGGA
ptr=strtok(NULL,",");
printf("%s\n",ptr);//時間
ptr=strtok(NULL,",");
printf("%s\n",ptr);//緯度
ptr=strtok(NULL,",");
printf("%s\n",ptr);//N北
ptr=strtok(NULL,",");
printf("%s\n",ptr);//経度
ptr=strtok(NULL,",");
printf("%s\n",ptr);//E東
ptr=strtok(NULL,",");
・
・
・
・
return 0;
}
コンパイラはmicrosoftvisualC++6.0です。
floatとかboubleにしたいのは緯度や経度の数値を計算して扱いやすいデータにするためです。
よろしくお願いします。
No.3
- 回答日時:
この流れに乗って、strtod() なんてのもありますよね。
#include <stdlib.h>
double strtod(const char *nptr, char **endptr);
つまりこんな感じになりますかね。
doublevalue;
char*endptr;
charstring[] = "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 );
とりあえず、ご参考までに。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
矢印キーを押下してコンソール...
-
C言語で複数列のデータを1列の...
-
char型2つを結合し、short型に...
-
C言語で型汎用性のある関数を作...
-
ファイルを辞書順に並べ替える...
-
ファイルから数字列を16進数の...
-
reallocとstrtokの併用について
-
【C言語】全角文字の配列を、全...
-
Cプログラムについて
-
printf による16進表示について
-
#defineが使用するメモリ領域に...
-
Ç言語でファイルサイズを変更す...
-
C++で指定文字列のカウント方法...
-
処理系によって。
-
コマンドファイルから、ビット...
-
配列への文字列の格納について
-
構造体メンバの初期化
-
fread処理について
-
fgetsがうまくいきません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
#defineが使用するメモリ領域に...
-
C言語のプログラムで、途中で止...
-
printf による16進表示について
-
空白を含んだ文字列がうまく格...
-
プログラミングの授業の課題です
-
【C言語】全角文字の配列を、全...
-
構造体メンバの初期化
-
Cでファイルの行数をカウントす...
-
char型2つを結合し、short型に...
-
矢印キーを押下してコンソール...
-
C言語で複数列のデータを1列の...
-
終了条件Ctrl+zについて,結果表...
-
Ç言語でファイルサイズを変更す...
-
エラーについて質問です。
-
C言語でのCSVファイルの読み出...
-
C++で指定文字列のカウント方法...
-
VC++でSQLへSELECT文を送ったの...
-
fscanfの使い方
-
c言語で文書を読み込み、単語の...
おすすめ情報