如何将获取的字符串数据转换为字符数组?

时间:2019-01-24 16:36:02

标签: c++ firebase arduino arduino-ide nodemcu

我正在做这个基于IoT的项目,目的是在nodeMCU的帮助下将数据显示到连接的显示器上(在这种情况下,我使用了MAX7219模块)。这里的想法是存储在我的Firebase数据库中的字符串将显示在led显示器上。

我从数据库中获取值到我的nodeMCU没有问题,但是由于我正在使用的代码(Max72xx_Message_serial,它可以作为max72xx的示例使用),因此将该字符串转换为char数组没有这个小问题。库)已使用char数组,但我只能以字符串格式获取存储的数据。我已经修改了该代码以便与Firebase连接,但是主要问题是将从数据库中获取的字符串转换为char数组。

我尝试了toCharArray(),但它仍然显示转换错误。

void readfromfirebase(void)
{
  static uint8_t  putIndex = 0;
  int n=1;
  while (Firebase.available())
   {
    newMessage[putIndex] = (char)Firebase.getString("Submit Message"); // this line produces the error
    if ((newMessage[putIndex] == '\n') || (putIndex >= BUF_SIZE-3)) // end of message character or full buffer
    {
      // put in a message separator and end the string
      newMessage[putIndex++] = ' ';
      newMessage[putIndex] = '\0';
      // restart the index for next filling spree and flag we have a message waiting
      putIndex = 0;
      newMessageAvailable = true;
    }
    else if (newMessage[putIndex] != '\r')
      // Just save the next char in next location
      {putIndex++;}
      n++;
  }
}

1 个答案:

答案 0 :(得分:1)

我认为您在混淆类型

getString返回一个String对象,可以使用String类的方法将其转换为char []。

我假设您的newMessage的类型为char []或char *。 然后,我建议您使用String.c_str()方法,因为它返回一个C样式的以空字符结尾的字符串,即char *。 请参阅https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/c_str/以供参考。

它还将字符串的最后一个字符设置为0。因此,诸如strlen,strcmp等方法都可以使用。

!注意不要修改c_str()返回的数组,如果要修改它,则应复制char []或使用string.toCharArray(buf, len)

您的代码可能如下所示。

    String msg = Firebase.getString("Submit Message");
    newMessage = msg.c_str();
   // rest of your code

如果newMessage是存储多个消息的缓冲区,表示char* newMessage[3]

    String msg = Firebase.getString("Submit Message");
    newMessage[putIndex] = msg.c_str();
   // rest of your code

请注意,因为您要在一个数组中存储多个字符,所以请使用strcmp来比较这些数组!

如果您不熟悉C,我建议您阅读。