web-dev-qa-db-fra.com

Conversion d'un int ou String en tableau de caractères sur Arduino

Je reçois une valeur int d'une des broches analogiques de mon Arduino. Comment concaténer cela dans une String puis convertir la String en un char[]?

On m'a suggéré d'essayer char msg[] = myString.getChars();, mais je reçois un message indiquant que getChars n'existe pas.

70
Chris
  1. Pour convertir et ajouter un entier, utilisez l’opérateur + + - (ou la fonction membre concat): 

    String stringOne = "A long integer: ";
    stringOne += 123456789;
    
  2. Pour obtenir la chaîne de type char[], utilisez toCharArray () :

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

Dans l'exemple, il n'y a qu'un espace pour 49 caractères (en supposant qu'il soit terminé par null). Vous voudrez peut-être rendre la taille dynamique.

113
Peter Mortensen

À titre de référence, voici un exemple de conversion entre String et char[] avec une longueur dynamique - 

// 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);

Oui, cela est douloureusement obtus pour quelque chose d'aussi simple qu'une conversion de type, mais malheureusement, c'est le moyen le plus simple. 

52
Alex King

Vous pouvez le convertir en char * si vous n'avez pas besoin d'une chaîne modifiable en utilisant:

(char*) yourString.c_str();

Cela serait très utile lorsque vous souhaitez publier une variable String via MQTT dans arduino.

6
Lê Vũ Linh

Aucune de ces choses n'a fonctionné. Voici un moyen beaucoup plus simple. L'étiquette str est le pointeur sur ce que IS est un tableau ...

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;
    }
}
0
user6776703