Arduinoのアナログピンの1つからint値を取得しています。どのように私はこれを連結んString
し、その後に変換String
しますかchar[]
?
試してみることを提案されましたがchar msg[] = myString.getChars();
、getChars
存在しないメッセージが表示されます。
回答:
整数を変換して追加するには、演算子+ =(またはメンバー関数concat
)を使用します。
String stringOne = "A long integer: ";
stringOne += 123456789;
文字列を型として取得するにはchar[]
、toCharArray()を使用します。
char charBuf[50];
stringOne.toCharArray(charBuf, 50)
この例では、49文字のスペースしかありません(nullで終了していると想定しています)。サイズを動的にすることをお勧めします。
持ち込みのコストString
(スケッチのどこにも使用されていない場合は含まれていません)は、約1212バイトのプログラムメモリ(フラッシュ)と48バイトのRAMです。
これは、Arduino Leonardoスケッチ用にArduinoIDEバージョン1.8.10(2019-09-13)を使用して測定されました。
char charBuf[stringOne.length()+1]
char ssid[ssidString.length()];
ssidString.toCharArray(ssid, ssidString.length());
+1
最初はなしで試しましたが、あなたの解決策は私のために働きました!
参考までに、動的な長さの間String
で変換する方法の例を次に示しますchar[]
-
// 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);
はい、これは型変換のような単純なものには痛々しいほど鈍感ですが、悲しいことに、これが最も簡単な方法です。
以下を使用して変更可能な文字列が必要ない場合は、char *に変換できます。
(char*) yourString.c_str();
これは、arduinoでMQTTを介してString変数を公開する場合に非常に役立ちます。
そのようなものはどれもうまくいきませんでした。これははるかに簡単な方法です..ラベル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
、[]
演算子を実装するオブジェクトです。
const char * msg = myString.c_str();
。とは異なりtoCharArray()
、c_str()
はゼロコピー操作であり、メモリに制約のあるデバイスではゼロコピーが適しています。