Как преобразовать 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"
}