Otrzymuję wartość int z jednego z pinów analogowych na moim Arduino. Jak mogę łączyć to do String
a następnie przekonwertować String
do char[]
?
Zasugerowano, żebym spróbował char msg[] = myString.getChars();
, ale otrzymuję wiadomość, getChars
która nie istnieje.
const char * msg = myString.c_str();
. W przeciwieństwie dotoCharArray()
,c_str()
jest operacją zerowej kopii, a zerowa kopia jest dobra na urządzeniach z ograniczoną pamięcią.Odpowiedzi:
Aby przekonwertować i dołączyć liczbę całkowitą, użyj operatora + = (lub funkcji składowej
concat
):Aby uzyskać ciąg jako typ
char[]
, użyj toCharArray () :W tym przykładzie jest tylko miejsce na 49 znaków (przy założeniu, że jest zakończone znakiem null). Możesz chcieć, aby rozmiar był dynamiczny.
Nad głową
Koszt wprowadzenia
String
(nie jest uwzględniony, jeśli nie jest używany nigdzie w szkicu), to około 1212 bajtów pamięci programu (flash) i 48 bajtów pamięci RAM.Zostało to zmierzone przy użyciu Arduino IDE w wersji 1.8.10 (2019-09-13) dla szkicu Arduino Leonardo .
źródło
char charBuf[stringOne.length()+1]
char ssid[ssidString.length()];
ssidString.toCharArray(ssid, ssidString.length());
+1
pierwszego, ale Twoje rozwiązanie zadziałało dla mnie!Jako odniesienie, oto przykład konwersji między
String
ichar[]
z dynamiczną długością -// 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);
Tak, jest to boleśnie tępe w przypadku czegoś tak prostego jak konwersja typu, ale niestety jest to najłatwiejszy sposób.
źródło
Możesz przekonwertować go na znak *, jeśli nie potrzebujesz modyfikowalnego ciągu, używając:
(char*) yourString.c_str();
Byłoby to bardzo przydatne, gdy chcesz opublikować zmienną typu String za pośrednictwem MQTT w arduino.
źródło
Żadna z tych rzeczy nie działała. Oto o wiele prostszy sposób ... etykieta jest wskaźnikiem do tego, co JEST tablicą ...
źródło
str
nie jest wskaźnikiem do tablicy, jest toString
obiekt implementujący[]
operator.