首页 > 解决方案 > ESP8266 NtpClient 将 int 响应解析为 char* 2 位数字

问题描述

我正在为微处理器 NodeMCU 编写用于在特定时间切换套接字的时间调度程序。我面临解析值的问题。我从数据库中获取值(例如'08:30')并保存到char *。我正在使用 NtpClient 获取当前时间,但它是 int 值。我的想法是从小时、':' 和分钟构建 char*,并与我在 DB 中的值进行比较,但我有两个问题:

我在 c++ 方面没有丰富的经验,我可以自己完成,但我想以最有效的方式完成,因为我将至少每 50 秒运行一次这个脚本。

标签: c++esp8266arduino-idearduino-esp8266

解决方案


我对 C++ 的经验很少。此外,Arduino IDE 不是完整的 C++。我的解决方案是:

int intLength( int N )
{
   if      ( N < 0  ) return 1 + intLength( -N );
   else if ( N < 10 ) return 1;
   else               return 1 + intLength( N / 10 );
}


void setSocketsState() {
      int currentHour = timeClient.getHours();
      int currentMinute = timeClient.getMinutes();
      char currentHourChar[10];
      char currentMinuteChar[10];
      itoa(currentHour, currentHourChar, 10);
      itoa(currentMinute, currentMinuteChar, 10);
    
      char dest[24] = "";
      if (intLength(currentHour) == 1) {
        strcat(dest, "0");
      }
      
      strcat(dest, currentHourChar);
      strcat(dest, ":");
      if (intLength(currentMinute) == 1) {
        strcat(dest, "0");
      }
      strcat(dest, currentMinuteChar);
    
      char* dateToCompare = dest;  // result: HH:MM
      socket1.handleCurrentTime(dateToCompare);
      socket2.handleCurrentTime(dateToCompare);
      socket3.handleCurrentTime(dateToCompare);
      socket4.handleCurrentTime(dateToCompare);
    }

我前面还有很长的路要走。如果您想查看我项目的这一部分,请点击以下链接: https ://github.com/wojtaszek171/SmartHome/blob/master/esp8266/ESP1/ESP1.ino


推荐阅读