Ich bekomme einen int-Wert von einem der analogen Pins an meinem Arduino. Wie verkette ich dies zu einer String
und konvertiere dann die String
in einen char[]
?
Es wurde vorgeschlagen, dass ich char msg[] = myString.getChars();
versuche, aber ich erhalte eine Nachricht, dass getChars
nicht vorhanden ist.
Verwenden Sie zum Konvertieren und Anhängen einer Ganzzahl Operator + = (oder die Memberfunktion concat
):
String stringOne = "A long integer: ";
stringOne += 123456789;
Um den String als Typ char[]
zu erhalten, verwenden Sie toCharArray () :
char charBuf[50];
stringOne.toCharArray(charBuf, 50)
Im Beispiel ist nur Platz für 49 Zeichen (vorausgesetzt, es wird mit Null beendet). Möglicherweise möchten Sie die Größe dynamisieren.
Als Referenz dient hier ein Beispiel, wie zwischen String
und char[]
mit dynamischer Länge konvertiert wird.
// 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);
Ja, das ist schmerzhaft stumpf für etwas so einfaches wie eine Typumwandlung, aber leider ist dies der einfachste Weg.
Sie können es in char * konvertieren, wenn Sie keine modifizierbare Zeichenfolge benötigen, indem Sie Folgendes verwenden:
(char*) yourString.c_str();
Dies wäre sehr nützlich, wenn Sie eine String-Variable über MQTT in Arduino veröffentlichen möchten.
Nichts davon funktionierte. Hier ist eine viel einfachere Methode. Die Bezeichnung str ist der Zeiger auf was IS ein 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;
}
}