我从我的Arduino上的一个模拟引脚获取了一个int值。如何将其与 String
连接起来,然后将 String
转换为 char[]
?
有人建议我尝试使用 char msg[] = myString.getChars();
,但是我收到了一个消息,说 getChars
不存在。
要将整数转换并追加,使用 += 运算符(或成员函数concat
):
String stringOne = "A long integer: ";
stringOne += 123456789;
要将字符串转换为 char[]
类型,请使用 toCharArray() 方法: char charBuf[50];
stringOne.toCharArray(charBuf, 50)
在这个示例中,只有49个字符的空间(假设它以null结尾)。您可能希望使其大小动态。
引入 String
的成本(如果在草图中未使用,则不会包含在内)大约是1212字节的程序存储器(flash)和48字节RAM。
这是在Arduino IDE版本1.8.10(2019-09-13)下使用Arduino Leonardo草图测量得出的。
必须有足够的可用RAM。否则,结果可能是应用程序的锁定/冻结或其他奇怪行为 (UB)。
char charBuf[stringOne.length()+1]
。 - loeschgchar ssid[ssidString.length()];
ssidString.toCharArray(ssid, ssidString.length());
- dumbledad+1
的方法,但你的解决方案对我很有效! - Blundering Philosopher以下是一个示例,演示如何在动态长度下在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);
是的,对于像类型转换这样简单的东西来说,这似乎非常难懂,但不知何故这是最简单的方法。
如果您不需要可修改的字符串,则可以通过以下方式将其转换为char*:
(char*) yourString.c_str();
当您想通过 Arduino 在 MQTT 上发布一个字符串变量时,这将非常有用。
所有那些东西都没用。这里有一个更简单的方法... 标签 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在这里提供的所有答案中,我很惊讶没有人提到已经内置的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);
const char * msg = myString.c_str();
。与toCharArray()
不同的是,c_str()
是一种零拷贝操作,而零拷贝在内存受限设备上很有优势。 - Edgar Bonet