目标是使用实际时间提供整数(或长整型(的函数。因此,我将本地时间写入字符串(据我所知(,并尝试将其与 atoi/atol 转换为我的 int/long。但不知何故,我没有得到预期的结果。
我尝试过的事情:
- 我从最初的 int 切换到 long。
- 我更改了字符串的大小。如果我将其大小调整为 7 而不是我需要的 15 个字节,它至少会转换字符串的日期部分。但我需要这一切。
我有以下代码:
long generate_time()
{
time_t time1;
time(&time1);
char time_str[15];
long act_time;
strftime(time_str, 15, "%Y%m%d%H%M%S", localtime(&time1));
printf("Actual time: %sn", time_str);
act_time = atol(time_str);
printf("Transformed time: %dn", act_time);
return act_time;
}
导致响应:
实际时间:20170407091221 改造时间:1240669205
希望这很容易解决,并提前感谢大家的帮助!
不能使用 long 来存储此类数据: signed long
的最大值为:
-2^31+1 to +2^31-1
或
-2,147,483,648 to 2,147,483,647
您可以使用unit64_t
来执行所需的操作
#include <stdint.h>
[...]
uint64_t act_time = strtoll(time_str, NULL, 10);
atol
将字符串转换为long
,在您的情况下可能是 32 位,因此无法保存值20170407091221
。您的值1240669205
是较低的 32 位20170407091221
。
例如,您可以使用Windows上的calc.exe
轻松检查:
20170407091221为十六进制:1258 49F3 1C15
1240669205为十六进制:49F3 1C15