arduino发送字符串(将数字转换为字符串)
问题
您需要将数字转换为字符串,例如在LCD或其他显示设备上显示数字。
解决方案
使用String变量将数字转换为字符字符串。您可以使用文字值或变量的内容。例如,以下代码将起作用:
String myNumber = String(1234);
或者:
int value = 127;
String myReadout = "The reading was ";
myReadout.concat(value);
或者:
int value = 127;
String myReadout = "The reading was ";
myReadout = value;
讨论
如果您要将数字转换为文本显示在LCD或串行设备上,则最简单的解决方案是使用LCD和Serial库中内置的转换功能(参见“第4.2节”)。但也许您正在使用没有这种内置支持的设备(参见第13章),或者您想在程序中将数字作为字符串操作。
当将数值分配给String变量时,arduino String类会自动将其转换为数字值。您可以使用concat函数或字符串 运算符将数值连接到字符串的末尾。
运算符可用于数字类型和字符串,但是其行为在每种情况下都不同。
以下代码将导致 number 变量的值为 13:
int number = 12;
number = 1;
使用 String 类型时,如下所示:
String textNumber = "12";
textNumber = 1;
textNumber 的文本字符串为 "121"。
在引入 String 类之前,常见的做法是使用 itoa 或 ltoa 函数。名称源于“整数转 ASCII”(itoa)和“长整数转 ASCII”(ltoa)。前面描述的 String 版本更易于使用,但如果您更喜欢使用 C 字符数组(如第 2.6 节所述),则可以使用以下内容。
itoa 和 ltoa 函数接受三个参数:要转换的值、将容纳输出字符串的缓冲区和数字基数(10 表示十进制数字,16 表示十六进制,2 表示二进制)。
以下示例演示如何使用 ltoa 函数将数字值转换为字符串:
/*
* NumberToString
* 从给定的数字创建一个字符串
*/
char buffer[12]; // long 数据类型有 11 个字符(包括负号)和一个终止符 null
void setup()
{
Serial.begin(9600);
while (!Serial);
long value = 12345;
ltoa(value, buffer, 10);
Serial.print(value);
Serial.print(" has ");
Serial.print(strlen(buffer));
Serial.println(" digits");
value = 123456789;
ltoa(value, buffer, 10);
Serial.print(value);
Serial.print(" has ");
Serial.print(strlen(buffer));
Serial.println(" digits");
}
void loop()
{
}
你的缓冲区必须足够大,以容纳字符串中的最大字符数。对于16位的十进制整数,这是七个字符(五个数字、一个可能的减号和一个总是表示字符串结尾的终止0);32位长整数需要12个字符的缓冲区(10个数字、减号和终止0)。如果超出缓冲区大小,不会给出警告;这是一个错误,可能会导致各种奇怪的症状,因为溢出会破坏内存中的某些其他部分,这些部分可能会被你的程序使用。处理这个问题的最简单方法是始终使用12个字符的缓冲区,并始终使用ltoa,因为这将适用于16位和32位值。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。