在Arduino上将int或String转换为char数组

时间:2011-09-12 05:22:09

标签: string char arduino

我从Arduino上的一个模拟引脚获取一个int值。如何将其与String连接,然后将String转换为char[]

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

5 个答案:

答案 0 :(得分:118)

  1. 要转换并附加整数,请使用 operator += (或成员函数concat):

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

    char charBuf[50];
    stringOne.toCharArray(charBuf, 50) 
    
  3. 在该示例中,只有49个字符的空间(假设它以null结尾)。您可能希望使尺寸动态化。

答案 1 :(得分:54)

作为参考,以下是如何使用动态长度在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);

是的,对于像类型转换这样简单的事情,这很痛苦,但遗憾的是,这是最简单的方法。

答案 2 :(得分:1)

如果不需要使用可修改的字符串,可以将其转换为char *,

(char*) yourString.c_str();

当您要通过arduino中的MQTT发布String变量时,这将非常有用。

答案 3 :(得分: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;
    }
}

答案 4 :(得分:0)

有了这里的所有答案,我很惊讶没有人提出使用内置的 itoa。

它将整数的字符串表示插入给定的指针中。

int a = 4625;
char cStr[5];       // number of digits + 1 for null terminator
itoa(a, cStr, 10);  // int value, pointer to string, base number

或者如果您不确定字符串的长度:

int b = 80085;
int len = String(b).length();
char cStr[len + 1];  // String.length() does not include the null terminator
itoa(b, cStr, 10);   // or you could use String(b).toCharArray(cStr, len);