【问题标题】:Arduino: casting char to integerArduino:将字符转换为整数
【发布时间】:2015-05-15 03:46:54
【问题描述】:

在 Arduino IDE 中将 char 转换为 int 时,我遇到了奇怪的问题。该方法应检查“IP”的字符数组。如果字符后面有一个或多个数字,则应将其转换为 int。

 int getPin(char dataFromAndroid[ ]){
     for(int i = 0; i < 10; i++) {
     if(dataFromAndroid[i] == 'I') {

       if(dataFromAndroid[i + 1] == 'P') { // Digitaler Pin

        char c1 = dataFromAndroid[i + 2];
        char c2 = dataFromAndroid[i + 3];
        int digPinNr;
        char str;
        str+=c1;

        if(c2 != '0') {
          str+=c2;
        }

        digPinNr = str -'0';
        Serial.print("c1:");
        Serial.print(c1);
        Serial.print("c2:");
        Serial.print(c2);
        Serial.print("str");
        Serial.print(str);
        Serial.print("Pin:");
        Serial.println(digPinNr);
        return digPinNr;
       }
     }
   } 

} 有时程序得到 5 而不是 7(见输出)。有人能帮帮我吗?!

Empfangen:W204IP5 c1:5c2: str5Pin:5
Empfangen:W106IP5 c1:5c2: str7Pin:7

【问题讨论】:

  • 在打印整个字符串和 getPin 中的打印输出之间,char[] 是否有可能被新数据覆盖?例如,中断处理程序会改变它吗?
  • 问题通常发生在最后一行吗?我可以看到在流的末尾,C2 可能指向无效数据(例如,回车而不是空格)。事实上,当 C2 是一个空格时,您仍在将其添加到您的 str 值。您只排除了零字符。
  • 您也可以考虑使用isdigit 来测试字符是否为数字。
  • 不,数组没有被覆盖,另一种方法使用相同的资源(例如 W204IP5),并且应该获取 'W' 之后的数字。它使用基本相同的代码并且可以正常工作。我会尝试使用 isdigit,无论如何,谢谢。

标签: casting char arduino int


【解决方案1】:

我现在找到了解决该问题的方法。我刚刚将 char 数组更改为字符串,转换完成如下:digPinNr = str.toInt(); 这是完整的解决方案:

int getPin(char dataFromAndroid[ ]){

     for(int i = 0; i < 10; i++) {
     if(dataFromAndroid[i] == 'I') {

       if(dataFromAndroid[i + 1] == 'P') { // Digitaler Pin

        char c1 = dataFromAndroid[i + 2];
        char c2 = dataFromAndroid[i + 3];
        int digPinNr;
        String str="";
        str+=c1;

        if(c2 != '0') {
          str+=c2;
        }

        digPinNr = str.toInt();
        Serial.print("c1:");
        Serial.print(c1);
        Serial.print("c2:");
        Serial.print(c2);
        Serial.print("str");
        Serial.print(str);
        Serial.print("Pin:");
        Serial.println(digPinNr);
        return digPinNr;
       }
     }
   } 

}

【讨论】:

    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多