Преобразование int или String в массив char на Arduino

Я получаю значение int от одного из аналоговых контактов на Arduino. Как объединить это с String, а затем преобразовать String в char[]?

Было предложено попробовать char msg[] = myString.getChars();, но я получаю сообщение о том, что getChars не существует.

Ответ 1

  • Чтобы преобразовать и добавить целое число, используйте operator + = (или функция-член concat):

    String stringOne = "A long integer: ";
    stringOne += 123456789;
    
  • Чтобы получить строку как тип char[], используйте toCharArray():

    char charBuf[50];
    stringOne.toCharArray(charBuf, 50) 
    

В этом примере доступно только место для 49 символов (предполагается, что оно завершено нулем). Вы можете сделать динамический размер.

Ответ 2

Как ссылка, вот пример того, как конвертировать между String и char[] с динамической длиной -

// Define 
String str = "This is my string"; 

// Length (with one extra character for the null terminator)
int str_len = str.length() + 1; 

// Prepare the character array (the buffer) 
char char_array[str_len];

// Copy it over 
str.toCharArray(char_array, str_len);

Да, это мучительно тупо для чего-то столь же простого, как преобразование типа, но, к сожалению, это самый простой способ.

Ответ 3

Ничего из этого не получилось. Здесь намного проще... метка str является указателем на то, что IS является массивом...

String str = String(yourNumber, DEC); // Obviously .. get your int or byte into the string

str = str + '\r' + '\n'; // Add the required carriage return, optional line feed

byte str_len = str.length();

// Get the length of the whole lot .. C will kindly
// place a null at the end of the string which makes
// it by default an array[].
// The [0] element is the highest digit... so we
// have a separate place counter for the array...

byte arrayPointer = 0;

while (str_len)
{
    // I was outputting the digits to the TX buffer

    if ((UCSR0A & (1<<UDRE0))) // Is the TX buffer empty?
    {
        UDR0 = str[arrayPointer];
        --str_len;
        ++arrayPointer;
    }
}

Ответ 4

Вы можете преобразовать его в char *, если вам не нужна изменяемая строка, используя:

(char*) yourString.c_str();

Это было бы очень полезно, если вы хотите опубликовать переменную String через MQTT в arduino.