Как преобразовать извлеченные строковые данные в массив символов? - PullRequest
0 голосов
/ 24 января 2019

Я делаю этот проект на основе IoT по отображению данных на подключенном дисплее (в данном случае я использовал модуль MAX7219) с помощью nodeMCU.Идея здесь заключается в том, что строка, которая хранится в моей базе данных Firebase, должна отображаться на светодиодном дисплее.

У меня не было проблем с передачей значения из базы данных в мой nodeMCU, но этого малопроблема с преобразованием этой строки в массив символов, поскольку используемый мной код (Max72xx_Message_serial, который был доступен в качестве примера с библиотекой max72xx) использовал массив символов, но я могу только извлечь сохраненные данные в формате строки.Я изменил этот код так, чтобы он связывался с 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 голосов
/ 26 января 2019

Я думаю, что вы путаете типы

getString возвращает объект String, который может быть преобразован в символ [] с использованием методов класса String.

Я полагаю, что ваш 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 (), если вы хотите изменить его, вы можете скопировать символ [] или использовать 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 для сравнения этихмассивы!

Если вы новичок в CI, рекомендую прочитать.

...