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


81

我从Arduino上的模拟引脚之一获取了整数值。如何String将其连接到a ,然后将其转换String为a char[]

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


7
您真的需要一个可修改的数组吗?如果没有,您可以使用const char * msg = myString.c_str();。不像toCharArray()c_str()是零复制操作,而零复制在内存受限的设备上是一件好事。
Edgar Bonet 2015年

@EdgarBonet它有效,但一次仅适用于一个字符串。最后一个c_str()覆盖较旧的版本。
mmv-ru

Answers:


134
  1. 要转换和附加整数,请使用运算符+ =(或成员函数concat):

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

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

在该示例中,只有49个字符的空间(假定它以null终止)。您可能要使大小动态。

高架

导入的成本String(如果未在草图中的任何地方使用,则不包括在内)大约为1212字节程序存储器(闪存)和48字节RAM。

这是使用Arduino IDE版本1.8.10(2019-09-13)针对Arduino Leonardo草图进行测量的。


13
节省了我很多时间。谢谢!为了使char []的大小动态,请执行类似操作char charBuf[stringOne.length()+1]
loeschg 2012年

9
我是这样动态地做的: char ssid[ssidString.length()]; ssidString.toCharArray(ssid, ssidString.length());
dumbledad

1
@loeschg谢谢,我+1起初没有尝试过,但是您的解决方案对我有用!
Blundering Philosopher 2014年


1
很好的答案!加一!
的Damián拉斐尔Lattenero

57

只是作为参考,在这里是如何相互转换的例子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);

是的,这对于像类型转换这样的简单操作来说是令人痛苦的钝化,但是可悲的是,这是最简单的方法。


14

如果不需要可修改的字符串,可以将其转换为char *,方法是:

(char*) yourString.c_str();

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


1

这些东西都不起作用。这是一种更简单的方法..标签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实现[]运算符的对象。
gre_gor
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.