web-dev-qa-db-fra.com

Comment convertir une chaîne en un flottant ou un int?

Dans un programme Arduino, je travaille sur le GPS qui envoie les coordonnées à l'arduino via USB. Pour cette raison, les coordonnées entrantes sont stockées sous forme de chaînes. Existe-t-il un moyen de convertir les coordonnées GPS en float ou int?

J'ai essayé int gpslong = atoi(curLongitude) et float gpslong = atof(curLongitude), mais les deux provoquent une erreur de la part d'Arduino:

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

Est-ce que quelqu'un a des suggestions?

15
Xjkh3vk

Vous pouvez obtenir un int à partir d'un String en appelant simplement toInt sur l'objet String (par exemple curLongitude.toInt()).

Si vous voulez un float, vous pouvez utiliser atof en conjonction avec la méthode toCharArray :

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() vous donnera le pointeur const char * du tampon de chaîne.
.
Vous pouvez donc utiliser vos fonctions de conversion :.
int gpslong = atoi(curLongitude.c_str())
float gpslong = atof(curLongitude.c_str())

2
cabbi

Que diriez-vous de sscanf(curLongitude, "%i", &gpslong) ou sscanf(curLongitude, "%f", &gpslong)? Selon l'apparence des chaînes, vous devrez bien sûr modifier la chaîne de formatage.

0
chessweb

Convertir une chaîne en long dans Arduino IDE:

    //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