2011-09-12 1787 views
61

我从我的Arduino上的某个模拟引脚获取int值。我如何将它连接到String,然后将String转换为char[]将int或String转换为Arduino上的char数组

有人建议我尝试char msg[] = myString.getChars();,但我收到的消息是getChars不存在。

+5

你真的需要一个可修改的数组吗?如果没有,你可以使用'const char * msg = myString.c_str();'。与'toCharArray()'不同,'c_str()'是一个零拷贝操作,零拷贝在内存受限设备上是一件好事。 –

回答

99
  1. 要转换和追加的整数,使用operator +=(或成员函数concat):

    String stringOne = "A long integer: "; 
    stringOne += 123456789; 
    
  2. 要获得字符串作为char[]类型,使用toCharArray()

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

在这个例子中,只有49个字符的空间(假设它被null终止)。你可能想要使大小动态。

+11

给了我很多修补时间。谢谢!为了使char []大小动态化,可以像下面这样动态执行: 'char ssid [ssidString.length()];' 'char charBuf [stringOne.length()+ 1]' – loeschg

+8

'ssidString.toCharArray(ssid,ssidString.length());' – dumbledad

+1

@loeschg谢谢,我一开始没有使用'+ 1',但是你的解决方案对我来说很合适! –

39

只是作为参考,在这里是如何与动态长度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); 

是的,这是简单的东西作为一个类型转换痛苦钝,但可悲的是这是最简单的方法。

0

没有一个工作。这里有一个更简单的方法..标签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; 
    } 
} 
+0

'str'不是指向数组的指针,它是一个实现'[]'运算符的String对象。 –