Преобразование типа int или String в массив символов на Arduino - PullRequest
77 голосов
/ 12 сентября 2011

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

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

Ответы [ 4 ]

122 голосов
/ 12 сентября 2011
  1. Чтобы преобразовать и добавить целое число, используйте оператор + = (или функцию-член concat):

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

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

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

55 голосов
/ 27 мая 2014

В качестве примера приведен пример преобразования между 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);

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

5 голосов
/ 25 мая 2019

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

(char*) yourString.c_str();

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

1 голос
/ 31 августа 2016

Ничего из этого не сработало.Вот гораздо более простой способ ... метка str является указателем на то, что является массивом ...

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...