繁体   English   中英

ESP8266 NtpClient 将 int 响应解析为 char* 2 位数字

[英]ESP8266 NtpClient parse int response into char* with 2 digits

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

  • 我需要从小时和分钟创建 2 位 char*。
  • 我需要加入这两个字符串

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

我对 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM