将字符缓冲区转换为整数(arduino)

时间:2014-05-24 19:40:12

标签: c++ c arduino arduino-uno

解决:

您可以使用以下命令更改char缓冲区:

char *arg;
arg = SCmd.next();
int i;
sscanf(arg, "%d", &i);
Serial.print("String value "); 
Serial.println(arg); 

Serial.print("Integer value "); 
Serial.println(i); 



问题:

我似乎无法弄清楚如何将char缓冲区内容更改为存储字符串中的整数。

例如:

'1'应为1,

'121'应为121

这是我尝试过的。

void doIt()
{
  char *arg;
  arg = SCmd.next();    // Get the next argument from the SerialCommand object buffer

  if (arg != NULL)      // As long as it existed, do it
  {
    int argInted = (int)arg; // Cast char arg* -> int argInted.

    Serial.print("String value "); 
    Serial.println(arg); 

    Serial.print("Integer value "); 
    Serial.println(argInted); // Print this new found integer.
  } 
  else {
    Serial.println("Fix your arguements"); 
  }
}

这是我得到的,每次评估为371。我在指针缓冲区中存储了不同的东西,有关如何转换的任何想法吗?

Arduino Ready
> INPUT 1
String value 1
Integer value 371
> INPUT 2
String value 2
Integer value 371
> INPUT WHATSthisDO
String value WHATSthisDO
Integer value 371

2 个答案:

答案 0 :(得分:0)

用于将char*转换为int使用atoi()功能。 http://www.cplusplus.com/reference/cstdlib/atoi/

答案 1 :(得分:0)

引用WhozCraig:这不是你如何将char *转换为int

一个简单的强制转换不能做,因为char是1个字节而int是4个字节,所以剩下的3个字节可以包含导致不可预测结果的任何垃圾:

char s[1] = {'2'};

cout << s << endl;
cout << (int)s << endl;
cout << atoi(s) << endl;

在我的机器上领先

2
-5760069
2