在不使用字符形式的数字数组的情况下在 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 daychar. It will be used in thesprintf()function call. This char array must be big enough to hold the conversion string. So that is why I usedchar 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())