Как преобразовать String в float или int?

В программе Arduino я работаю над GPS, отправляет координаты в arduino через USB. Из-за этого входящие координаты сохраняются как строки. Есть ли способ конвертировать 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*)'

Есть ли у кого-нибудь предложения?

Ответы

Ответ 1

Вы можете получить int из String, просто позвонив toInt в объект String (например, curLongitude.toInt()).

Если вы хотите float, вы можете использовать atof в сочетании с методом toCharArray:

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

Ответ 2

c_str() предоставит вам строковый буфер const char * указатель.


Таким образом, вы можете использовать свои функции конвертации:.
int gpslong = atoi(curLongitude.c_str())
float gpslong = atof(curLongitude.c_str())

Ответ 3

Как насчет sscanf(curLongitude, "%i", &gpslong) или sscanf(curLongitude, "%f", &gpslong)? В зависимости от того, как выглядят строки, возможно, вам придется изменить строку формата, конечно.

Ответ 4

Преобразование String в Long в 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;
    }

Ответ 5

String stringOne, stringTwo, stringThree;
int a;

void setup() {
  // initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  stringOne = 12; //String("You added ");
  stringTwo = String("this string");
  stringThree = String();
  // send an intro:
  Serial.println("\n\nAdding Strings together (concatenation):");
  Serial.println();enter code here
}

void loop() {
  // adding a constant integer to a String:
  stringThree =  stringOne + 123;
  int gpslong =(stringThree.toInt());
  a=gpslong+8;
  //Serial.println(stringThree);    // prints "You added 123"
  Serial.println(a);    // prints "You added 123"
}