问题

您需要将数字转换为字符串,例如在LCD或其他显示设备上显示数字。

arduino发送字符串(将数字转换为字符串)(1)

解决方案

使用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位值。

,