【问题标题】:a gettime() function that returns a uint16_t value in C在 C 中返回 uint16_t 值的 gettime() 函数
【发布时间】:2014-12-10 01:43:35
【问题描述】:

您好,我正在尝试在 C 中创建一个返回 uint16_tgetTime() 函数。

我现在可以成功获取字符数组

这是我输出字符数组的代码。

说今天是Dec 9 2014,输出将是091214

那么我怎样才能使输出成为uint16_t 类型?

在这种情况下,如果"0"uint16_t 类型,我可以将"0" 保留在091214 中吗?

char *getT(){
struct tm *tm;
time_t t;
static char str_date[10];

t = time(NULL);
tm = localtime(&t);

strftime(str_date, sizeof(str_date), "%d%m%y", tm);
return str_date;}

还有另一种方法是我从网上找到的代码中修改的。

这个返回9+12+14....的总和

uint16_t getD(){
struct tm *tm_time;
time_t ti;
//const time_t create_time;
uint16_t t, d;
ti = time(NULL);
tm_time = localtime(&ti);
t = (tm_time->tm_sec >> 1) + (tm_time->tm_min << 5) + (tm_time->tm_hour << 11);
d = (tm_time->tm_mday>>1) + ((tm_time->tm_mon+1) << 5) + ((tm_time->tm_year-80) << 9);
printf("%d %d %d %d \n",d,tm_time->tm_mday>>1,tm_time->tm_mon<<5,(tm_time->tm_year-80)<<9);
return d;}

【问题讨论】:

  • 你能解释一下你需要这个做什么以及你打算如何使用它吗?看起来可能有点 XY 问题。
  • 所以这是我的任务的一部分,即获取文件的时间戳。正如struct 文件中定义的讲师,creation_timeuint16_t。我的计划是entry.creation_time = getTime(); 这就是为什么我希望getTime() 的返回值为uint16_t。谢谢。
  • 位 0–4:月份中的某天,有效值范围为 1-31(含)。位 5–8:一年中的月份,1 = 一月,有效值范围 1–12(含)。位 9–15:从 1980 年开始的年数,有效值范围 0– = 127(包括 1980–2107)。这是时间戳的要求。希望我没有弄错 uint16_t...
  • 选择一个“纪元日期”,然后只使用自该开始日期以来的天数。为您提供大约 180 年的范围。

标签: c time.h gettime uint16


【解决方案1】:
uint16_t getD() {
  time_t ti;
  ti = time(NULL);
  struct tm tm_time;
  tm_time = *localtime(&ti);

  //const time_t create_time;
  uint16_t t, d;
  d = tm_time.tm_mday
      + (tm_time.tm_mon + 1) * 32
      + (tm_time.tm_year - (1980-1900)) * 512;

  // Print ddmmyy
  printf("%02d%02d%02d\n", 
      (int) d%32, (int) (d/32)%16, (int) ((d/512)%128 + (1980-1900))%100);
  return d;
}

【讨论】:

  • 感谢您的帮助,代码可以正常工作。我只需要知道一件事。它返回的 d 打印出 17801,但它实际上代表 uin16_t 中的 091214。这是正确的理解方式吗?
  • @Shanji 是 17801 (base 10) --> 100010110001001 base 2 --> 100010 1100 01001 base 2 --> 34 12 9 (base 10) --> 2014 年 12 月 9 日。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
相关资源
最近更新 更多