Converting an int or String to a char array on Arduino

  1. To convert and append an integer, use operator += (or member function concat):

     String stringOne = "A long integer: ";
     stringOne += 123456789;
    
  2. To get the string as type char[], use toCharArray():

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

In the example, there is only space for 49 characters (presuming it is terminated by null). You may want to make the size dynamic.

Overhead

The cost of bringing in String (it is not included if not used anywhere in the sketch), is approximately 1212 bytes of program memory (flash) and 48 bytes RAM.

This was measured using Arduino IDE version 1.8.10 (2019-09-13) for an Arduino Leonardo sketch.


Just as a reference, below is an example of how to convert between String and char[] with a dynamic length -

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

Yes, this is painfully obtuse for something as simple as a type conversion, but somehow it's the easiest way.


You can convert it to char* if you don't need a modifiable string by using:

(char*) yourString.c_str();

This would be very useful when you want to publish a String variable via MQTT in arduino.