我有一个随机字符缓冲区从 XBee 模块流入我的 Arduino。我想提取它看到的第一个整数(如果有所不同,将是 <= 3 位整数),然后继续使用该数字并停止查看其余的传入字符。
作为引用,我正在尝试将其用作与 node.js 服务器的双向握手的一部分,当其他 Arduino 也尝试握手或已经连接并发送数据时,该服务器不会搞砸。
我认为我有一种方法可以提取一个 int,但它看起来真的很难看,所以我认为必须有一种更短/更清晰的方法来解决这个问题。这是我很长的代码,用来做一些可能非常简单的事情:
String intString = "";
int intStart = 0;
for (int i = 0; i < msg.length(); i++) {
while (intStart != 2) {
if (intStart == 0) {
if ((msg[i] == '0') || (msg[i] == '1') || (msg[i] == '2') ||
(msg[i] == '3') || (msg[i] == '4') || (msg[i] == '5') ||
(msg[i] == '6') || (msg[i] == '7') || (msg[i] == '8') ||
(msg[i] == '9')) {
intString += msg[i];
intStart = 1;
}
}
// previous int, next is still int
if (intStart == 1) {
if ((msg[i] == '0') || (msg[i] == '1') || (msg[i] == '2') ||
(msg[i] == '3') || (msg[i] == '4') || (msg[i] == '5') ||
(msg[i] == '6') || (msg[i] == '7') || (msg[i] == '8') ||
(msg[i] == '9')) {
intString += msg[i];
intStart = 1;
}
}
// previous int, next is not int
else if ((msg[i] != '0') && (msg[i] != '1') && (msg[i] != '2') &&
(msg[i] != '3') && (msg[i] != '4') && (msg[i] == '5') &&
(msg[i] != '6') && (msg[i] != '7') && (msg[i] == '8') &&
(msg[i] != '9')) {
intStart = 2;
}
}
}
int number = intString.toInt();
Serial.println(number);
非常感谢任何建议/建议。
最佳答案
与其比较从 0 到 9 的每个数字,不如使用标准 C 函数 isdigit()
。
关于c++ - 在 Arduino 上从字符串中提取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39683371/