it-swarm.it

Convertire un int o una stringa in un array di caratteri su Arduino

Sto ottenendo un valore int da uno dei pin analogici sul mio Arduino. Come concatenarlo a un String e quindi convertire String in char[]?

Mi è stato suggerito di provare char msg[] = myString.getChars();, ma sto ricevendo un messaggio che getChars non esiste.

70
Chris
  1. Per convertire e aggiungere un intero, utilizzare operator + = (o funzione membro concat): 

    String stringOne = "A long integer: ";
    stringOne += 123456789;
    
  2. Per ottenere la stringa come tipo char[], utilizzare toCharArray () :

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

Nell'esempio, c'è solo spazio per 49 caratteri (presumendo che sia terminato da null). Potresti voler rendere le dimensioni dinamiche.

113
Peter Mortensen

Proprio come riferimento, ecco un esempio di come convertire tra String e char[] con una lunghezza dinamica - 

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

Sì, questo è dolorosamente ottuso per qualcosa di semplice come una conversione di tipo, ma purtroppo è il modo più semplice. 

52
Alex King

Nessuna di quelle cose ha funzionato. Ecco un modo molto più semplice .. l'etichetta str è il puntatore a cosa IS un array ...

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