web-dev-qa-db-ja.com

ArduinoでintまたはStringをchar配列に変換する

Arduinoのアナログピンの1つからint値を取得しています。これをStringに連結してからStringchar[]に変換するにはどうすればよいですか?

char msg[] = myString.getChars();を試すことをお勧めしましたが、getCharsが存在しないというメッセージが表示されます。

77
Chris
  1. 整数を変換して追加するには、operator + =(またはメンバー関数concat)を使用します。

    String stringOne = "A long integer: ";
    stringOne += 123456789;
    
  2. タイプをchar[]として文字列を取得するには、 toCharArray() を使用します。

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

この例では、49文字のスペースのみがあります(ヌルで終了すると仮定します)。サイズを動的にしたい場合があります。

121
Peter Mortensen

参考として、ここにStringchar[]を動的な長さで変換する方法の例を示します-

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

はい、これは型変換のような単純なものにとっては痛いほど鈍いですが、悲しいことにそれは最も簡単な方法です。

55
Alex King

変更可能な文字列が必要ない場合は、次を使用してchar *に変換できます。

(char*) yourString.c_str();

これは、arduinoでMQTTを介してString変数を公開する場合に非常に便利です。

4
Lê Vũ Linh

そのようなものはどれもうまくいきませんでした。これはもっと簡単な方法です..ラベル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;
    }
}
1
user6776703