質問
私の構文解析GPS状態での応募は固定NMEA文章を、端部の地理的分が常に後ます。しかし、システムロケールを定義カンマとして小数点の区切り atof 機能を無視し期間全体の割合です。
何が最善の方法でそれらを取り扱えるようにしますか?長緯度の文字列に格納される文字配列の場合。
例コード:
m_longitude = atof((char *)pField);
場所
pField[] = "01000.3897";
クロスプラットフォームプロジェクト編のためのWindows XPおよびCE.
コメントソリューション:
受け答えはよりエレガントが この 回答やコメントも知ることとしては修正
解決
きは常に使用moduloエラーチェック):
#include <sstream>
...
float longitude = 0.0f;
std::istringstream istr(pField);
istr >> longitude;
標準iostreams軒のグローバルロケールによるデフォルトするときに初期化され、クラシック(米国)locale).このように上記は一般的な人前のグローバルロケールになっても、他のもの場合でも、走っ非英語ます。んだことを希望するロケールを使用し、特定のロケールの"心"のストリームとロケールの前からの読み出し:
#include <sstream>
#include <locale>
...
float longitude = 0.0f;
std::istringstream istr(pField);
istr.imbue(std::locale("C"));
istr >> longitude;
どん使う正規表現検証NMEA分野の異なる部品の分野として捉え、その後の変換は、異なるパーツを使用して上記の方法です。の前の部分の小数点、NMEA経度分野で実際にスマートフォンとして"DDDMM.mmm.."がDDDに対応し、MM.mmm分がでしょうが、すでに知っています。
他のヒント
厄解し、一度は sprintf()
0.0fかの二文字から出力されます。そして、入力文字列置き換え'.'による文字です。この解決のカンマで区切る場合がればロケールを設定小数分離機。
の他理由をすることができません setlocale "C"以前のatof回復することロケール。か誤解の...
また繰り返し処理を実行し、すべての文字配列の、スワップ以外に任意の数字 .
文字、すべての座標に number-single_delimiter_character_-number
形式です。
いの必要はなロケールの挙動を併記?ない場合
setlocale(LC_ALL|~LC_NUMERIC, "");
あるいはそれと同等の利用std::ロケールのコンストラクタです。
一部のソリューション上のものではないと考えられるが、いを提案し、このことを完全にfailproofます。でコピー-貼り付けるこの機能を使用します。
float stor(const char* str) {
float result = 0;
float sign = *str == '-' ? str++, -1 : 1;
while (*str >= '0' && *str <= '9') {
result *= 10;
result += *str - '0';
str++;
}
if (*str == ',' || *str == '.') {
str++;
float multiplier = 0.1;
while (*str >= '0' && *str <= '9') {
result += (*str - '0') * multiplier;
multiplier /= 10;
str++;
}
}
result *= sign;
if (*str == 'e' || *str == 'E') {
str++;
float powerer = *str == '-'? str++, 0.1 : 10;
float power = 0;
while (*str >= '0' && *str <= '9') {
power *= 10;
power += *str - '0';
str++;
}
result *= pow(powerer, power);
}
return result;
}
今、最も単純な回答をいうを利用するのバージョン atof()
るCロケールのパラメータ:
_locale_t plocale = _create_locale( LC_ALL, "C" );
double result = _atof_l( "01000.3897", plocale );
_free_locale( plocale );
を作成することはできな混乱ストのログインロケール、または操作文字列のです。を作成し、ご希望のロケールのオブジェクトな全ての処理を無料ででき終了しました。