15

在我正在研究 GPS 的 Arduino 程序中,通过 USB 将坐标发送到 arduino。因此,传入的坐标存储为字符串。有没有办法将 GPS 坐标转换为浮点数或整数?

我试过 int gpslong = atoi(curLongitude)and float gpslong = atof(curLongitude),但它们都导致 Arduino 出错:

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

有没有人有什么建议?

4

5 回答 5

23

您可以通过调用对象(例如)int从 a中获取 a。StringtoIntStringcurLongitude.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);
于 2013-08-13T03:10:10.340 回答
3

c_str()将为您提供字符串缓冲区 const char* 指针。
.
所以你可以使用你的转换功能:。
int gpslong = atoi(curLongitude.c_str())
float gpslong = atof(curLongitude.c_str())

于 2014-10-10T16:03:16.097 回答
0

sscanf(curLongitude, "%i", &gpslong)或者怎么样sscanf(curLongitude, "%f", &gpslong)?当然,根据字符串的外观,您可能必须修改格式字符串。

于 2014-09-19T22:08:18.683 回答
0

在 Arduino IDE 中将 String 转换为 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;
    }
于 2016-01-23T02:34:14.887 回答
-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"
}
于 2017-07-18T23:30:03.367 回答