web-dev-qa-db-ja.com

Stringをどのようにfloatまたはintに変換しますか?

Arduinoプログラムでは、GPSで作業していますが、USB経由で座標をarduinoに送信します。このため、入力座標は文字列として保存されます。 GPS座標をfloatまたはintに変換する方法はありますか?

int gpslong = atoi(curLongitude)float gpslong = atof(curLongitude)を試しましたが、どちらもArduinoにエラーを発生させます:

error: cannot convert 'String' to 'const char*' for argument '1' to 'int atoi(const char*)'

誰か提案はありますか?

15
Xjkh3vk

intオブジェクトで String を呼び出すだけで、toIntからStringを取得できます(例:curLongitude.toInt())。

floatが必要な場合は、atoftoCharArray メソッドと組み合わせて使用​​できます。

char floatbuf[32]; // make this at least big enough for the whole string
curLongitude.toCharArray(floatbuf, sizeof(floatbuf));
float f = atof(floatbuf);
23
nneonneo

c_str()は、文字列バッファーconst char *ポインターを提供します。

したがって、変換関数を使用できます。
int gpslong = atoi(curLongitude.c_str())
float gpslong = atof(curLongitude.c_str())

2
cabbi

sscanf(curLongitude, "%i", &gpslong)またはsscanf(curLongitude, "%f", &gpslong)はどうですか?もちろん、文字列の外観に応じて、書式文字列を変更する必要があるかもしれません。

0
chessweb

Arduino IDEで文字列をLongに変換します。

    //stringToLong.h

    long stringToLong(String value) {
        long outLong=0;
        long inLong=1;
        int c = 0;
        int idx=value.length()-1;
        for(int i=0;i<=idx;i++){

            c=(int)value[idx-i];
            outLong+=inLong*(c-48);
            inLong*=10;
        }

        return outLong;
    }
0
FWaqidi