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


81

Arduinoのアナログピンの1つからint値を取得しています。どのように私はこれを連結んStringし、その後に変換Stringしますかchar[]

試してみることを提案されましたがchar msg[] = myString.getChars();getChars存在しないメッセージが表示されます。


7
本当に変更可能な配列が必要ですか?そうでない場合は、を使用できますconst char * msg = myString.c_str();。とは異なりtoCharArray()c_str()はゼロコピー操作であり、メモリに制約のあるデバイスではゼロコピーが適しています。
エドガーボネット2015

@EdgarBonet動作しますが、一度に1つの文字列に対してのみ機能します。最後のc_str()は古いものを上書きします。
MMV-ruの

回答:


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

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

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

この例では、49文字のスペースしかありません(nullで終了していると想定しています)。サイズを動的にすることをお勧めします。

オーバーヘッド

持ち込みのコストString(スケッチのどこにも使用されていない場合は含まれていません)は、約1212バイトのプログラムメモリ(フラッシュ)と48バイトのRAMです。

これは、Arduino Leonardoスケッチ用にArduinoIDEバージョン1.8.10(2019-09-13)を使用して測定されました。


13
いじくり回す時間を大幅に節約できました。ありがとう!char []サイズを動的にするには、次のようにしますchar charBuf[stringOne.length()+1]
loeschg 2012年

9
私は次のように動的に行いました: char ssid[ssidString.length()]; ssidString.toCharArray(ssid, ssidString.length());
dumbledad 2012

1
@loeschgありがとう、私は+1最初はなしで試しましたが、あなたの解決策は私のために働きました!
失敗の哲学者2014


1
とてもいい答えです!一を足す!
ダミアン・ラファエルLattenero

57

参考までに、動的な長さの間Stringで変換する方法の例を次に示しますchar[]-

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


14

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

(char*) yourString.c_str();

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


1

そのようなものはどれもうまくいきませんでした。これははるかに簡単な方法です..ラベルstrは、配列とは何かへのポインタです...

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

strは配列へのポインタではなくString[]演算子を実装するオブジェクトです。
gre_gor 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.