Преобразование 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.