【发布时间】: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,无论如何,谢谢。