c++ - 在 Arduino 上从字符串中提取整数

标签 c++ c int substring arduino-uno

我有一个随机字符缓冲区从 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/

相关文章:

c++ - OpenMP C++ 无法随处理器数量线性加速

c++ - 在 Windows DLL 中通过它的签名查找函数

c - getopt() 中的 optarg 始终为 null

c++ - 正确地将 B 转换为 MB,或者完全错误

c++ - Flood_router6.c中的一些函数(BackTrack中的DoS程序)

c++ - 在 C++ 中建模类型类

c++ - 如何使用来自不同继承层次级别的多个虚函数指针作为模板参数?

c - 将特定字符插入字符串中

java - 在 Java 中将子字符串转换为 Int

java - 将 int 转换为 String,然后使用 XOR 对其进行加密