在不使用字符形式的数字数组的情况下在 TFT 上显示日期
Displaying a date on a TFT without using an array of numbers in char form
我正在尝试从 DateTime
实例将一个月中的某一天写入 TFT 显示器。 DateTime
实例的数据来自 RTC。
基本上,我正在尝试这样做:
DateTime timenow;
timenow = rtc.now(); // Get and store the current RTC data as DateTime.
tft.textWrite(timenow.day()); // This doesn't work (see below), but it shows the idea of what I am trying to do.
tft.textWrite
接受 char
作为其参数,但 timenow.day()
似乎输出 int
。我能够让它工作的唯一方法(这显然不是一个好方法,正如你将看到的那样)是制作一个巨大的数组,其中包含从 1 到31 作为 char
:
const char days[31][3] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"};
然后我在我的代码中使用了数组:
DateTime timenow;
timenow = rtc.now(); // Get and store the current RTC data as DateTime.
tft.textWrite(days[timenow.day() - 1]);
不幸的是,我必须对年份做同样的事情,而且我无法将可预见的未来的所有年份手动输入到一个数组中。它会占用内存,而且会不必要地耗费时间。
我的问题是,有人能告诉我如何将 int
转换为 char
以便在这个函数中使用而不需要巨大的数组吗?
我已经尝试了从 String(timenow.day())
到 char(timenow.day())
到 char(String(timenow.day()))
和 none 之类的所有方法似乎都有效。
您需要将整数转换为字符串。
int day = timenow.day();
char str[12];
sprintf(str, "%d", day);
tft.textWrite(str);
编辑:
代码解释:
- 首先,我们将
timenow.day()
的整数值存入day
;
然后我们声明一个char
数组来存储int day
到char. It will be used in the
sprintf()function call. This char array must be big enough to hold the conversion string. So that is why I used
char str[12]的转换`在这里。所以,我们有 12 个字节来存储转换后的值。
sprintf(str, "%d", day)
将 char *
作为其第一个参数,将存储转换。第二个参数是你想要得到的输出字符串的格式。然后,下一个参数是您传递的格式字符串所需的参数,在这种情况下,它是 "%d"
,这意味着我们需要给它一个整数值。这就是我们将 day
变量作为最后一个参数传递的原因。
您可以在 Linux 终端中通过 运行 man sprintf
获取有关 sprintf
功能的更多详细信息。否则,您可以获得更多信息 here.
如果你使用的是 c++11,你可以使用 to_string 这样的东西:
tft.textWrite(std::to_string(timenow.day()).c_str())
我正在尝试从 DateTime
实例将一个月中的某一天写入 TFT 显示器。 DateTime
实例的数据来自 RTC。
基本上,我正在尝试这样做:
DateTime timenow;
timenow = rtc.now(); // Get and store the current RTC data as DateTime.
tft.textWrite(timenow.day()); // This doesn't work (see below), but it shows the idea of what I am trying to do.
tft.textWrite
接受 char
作为其参数,但 timenow.day()
似乎输出 int
。我能够让它工作的唯一方法(这显然不是一个好方法,正如你将看到的那样)是制作一个巨大的数组,其中包含从 1 到31 作为 char
:
const char days[31][3] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"};
然后我在我的代码中使用了数组:
DateTime timenow;
timenow = rtc.now(); // Get and store the current RTC data as DateTime.
tft.textWrite(days[timenow.day() - 1]);
不幸的是,我必须对年份做同样的事情,而且我无法将可预见的未来的所有年份手动输入到一个数组中。它会占用内存,而且会不必要地耗费时间。
我的问题是,有人能告诉我如何将 int
转换为 char
以便在这个函数中使用而不需要巨大的数组吗?
我已经尝试了从 String(timenow.day())
到 char(timenow.day())
到 char(String(timenow.day()))
和 none 之类的所有方法似乎都有效。
您需要将整数转换为字符串。
int day = timenow.day();
char str[12];
sprintf(str, "%d", day);
tft.textWrite(str);
编辑:
代码解释:
- 首先,我们将
timenow.day()
的整数值存入day
; 然后我们声明一个
char
数组来存储int day
到char. It will be used in the
sprintf()function call. This char array must be big enough to hold the conversion string. So that is why I used
char str[12]的转换`在这里。所以,我们有 12 个字节来存储转换后的值。sprintf(str, "%d", day)
将char *
作为其第一个参数,将存储转换。第二个参数是你想要得到的输出字符串的格式。然后,下一个参数是您传递的格式字符串所需的参数,在这种情况下,它是"%d"
,这意味着我们需要给它一个整数值。这就是我们将day
变量作为最后一个参数传递的原因。
您可以在 Linux 终端中通过 运行 man sprintf
获取有关 sprintf
功能的更多详细信息。否则,您可以获得更多信息 here.
如果你使用的是 c++11,你可以使用 to_string 这样的东西: tft.textWrite(std::to_string(timenow.day()).c_str())