2013-08-13 21 views
14

W programie Arduino pracuję nad GPS wysyła współrzędne do arduino przez USB. Z tego powodu przychodzące współrzędne są przechowywane jako ciągi. Czy istnieje sposób konwersji współrzędnych GPS na float lub int?Jak przekonwertować ciąg na float lub int?

Próbowałem int gpslong = atoi(curLongitude) i float gpslong = atof(curLongitude), ale oboje przyczyną Arduino dać błąd:

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

Czy ktoś ma jakieś sugestie?

Odpowiedz

22

można uzyskać int od A String po prostu dzwoniąc toInt na String obiektu (np curLongitude.toInt()).

Jeśli chcesz float, można użyć atof w połączeniu z metodą toCharArray:

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

toInt działa prawidłowo dzięki. Jak dokładnie używam toCharArray w tym przypadku? Nie mogę tego zrozumieć. – Xjkh3vk

+0

@ Xjkh3vk: dodano przykład. – nneonneo

0

jak o sscanf(curLongitude, "%i", &gpslong) lub sscanf(curLongitude, "%f", &gpslong)? W zależności od tego, jak wyglądają struny, oczywiście musisz zmodyfikować ciąg formatu.

2

c_str() poda ci znak const buff * wskaźnik bufora ciągów.
.
Dzięki czemu można korzystać z funkcji konwersji :.
int gpslong = atoi(curLongitude.c_str())
float gpslong = atof(curLongitude.c_str())

+0

Zauważ, że są to Arduino 'String's, a nie C++' string's. – nneonneo

0

Konwersja String na Long w 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; 
    } 
-2
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" 
} 
+2

To jest strona tylko w języku angielskim. Ponadto ta odpowiedź nie dodaje niczego użytecznego i nie wyjaśnia, co robi (i jest bardzo skomplikowana). – Clonkex

Powiązane problemy