【问题标题】:Arduino String.indexOf() not workingArduino String.indexOf() 不工作
【发布时间】:2019-01-22 01:04:03
【问题描述】:

在这里待了好几个小时。 indexOf() 函数永远不会返回 > -1,即使我在串行监视器中看到字符打印,并且字符串的长度随着字符的进入而增加。

String command;    

void loop() {

        while ( bleuart.available() ) {
            char ch;
            ch = bleuart.read();
            command += ch;
            Serial.print(ch);
        }

        Serial.println(command.length());

        if(command.indexOf("\n") > -1 ) {
           Serial.println("command:");
           Serial.println(command);
         }

    }

【问题讨论】:

  • 您在串行监视器中看到新行吗?还是只是一个长字符串? \n 是换行符
  • 只是一个长字符串 - 没有新行。 \n 似乎什么也没做。
  • 如果你在字符串中看到 \n 那么这实际上是 "\\"+" n" 字符。仅用于检查更改 indexof 以查找“\\n”并查看是否匹配
  • @darc 这行得通!虽然不太明白为什么。 “\n”如何变成“\\n”?
  • 基本上,\ 是用于转义序列的特殊字符,例如 '\n' 代表换行。所以如果你想把\打印成字符串,你需要添加\来转义它“\\”,另一个例子:假设你想在一个字符串中使用“你需要用\来转义它,就像这样”\“”。你可以在这里看到完整的转义序列列表”en.wikipedia.org/wiki/Escape_sequences_in_C

标签: string bluetooth arduino char indexof


【解决方案1】:

@darc 是正确的,但如果字符串来自 ble 模块,那么字符串中不应该有实际的 \n ,我假设。这应该是一个换行符(DEC 10),\n 应该与此相同。

我在您的代码中看到 3 个不同的问题。

  1. 你的command 变量永远不会被清除,所以它只会增长到 你内存不足。完成命令后,调用 command = "";
  2. 当你构造你的命令字符串时使用command.concat(ch);而不是command += ch;
  3. 您应该将if(command.indexOf("\n") > -1 ) 更改为if(command.indexOf("\n") != -1 )

看看有没有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多