2011-09-12 29 views
61

Arduino'mdaki analog pinlerden birinden int değeri alıyorum. Bunu bir String ile birleştirip String'u char[]'a nasıl dönüştürürüm?Bir int veya String'i Arduino'daki bir char dizisine dönüştürme

char msg[] = myString.getChars();'u denemem önerildi, ancak getChars'un bulunmadığı bir ileti alıyorum. dönüştürmek ve bir tamsayı eklemek için

+5

Gerçekten değiştirilebilir bir diziye mi ihtiyacınız var? Eğer değilse, const char * msg = myString.c_str(); 'kullanabilirsiniz. ToCharArray() 'dan farklı olarak, c_str()' sıfır kopyalama işlemidir ve sıfır kopya, bellek kısıtlı aygıtlarda iyi bir şeydir. –

cevap

99
  1. , operator += (veya üye işlevi concat) kullanın:

    String stringOne = "A long integer: "; 
    stringOne += 123456789; 
    
  2. tip char[] olarak dize almak için kullanmak toCharArray():

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

Örnekte, yalnızca 49 karakter için boşluk vardır (boş değer tarafından sonlandırıldığı varsayılır). Boyutu dinamik hale getirmek isteyebilirsiniz. Sadece bir referans olarak

+11

Bana çok zaman geçirdim. Teşekkürler! ' ; ' Char ssid [ssidString.length()]: 'karakter charBuf [stringOne.length() + 1]' – loeschg

+8

Böyle dinamik yapmış gibi bir şey yapmak, Char [] boyut dinamik hale getirmek için ssidString.toCharArray (ssid, ssidString.length()); – dumbledad

+1

@loeschg Teşekkür ederim, ilk başta + 1'le denedim, ama çözümünüz benim için çalıştı! –

39

, burada dinamik bir uzunlukta String ve char[] arasında dönüştürmek için nasıl bir örnektir -

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

Evet, bu bir tür dönüştürme gibi basit bir şey için acı geniş olmakla birlikte, ne yazık ki bu en kolay yol.

0

Hiçbiri işe yaramadı. Burada çok daha basit bir yol var .. label str bir dizi ne için işaretçidir ...

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

'str' bir dizinin işaretçisi değil,' [] 'operatörünü uygulayan bir' String' nesnesi. –

İlgili konular