目标是一个函数,它提供实际时间的int(或long)。 我因此将localtime写入一个字符串(据我所知)并尝试将其与atoi / atol一起转换为我的int / long。但不知怎的,我没有得到预期的结果。
我尝试的事情:
我已获得以下代码:
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: %s\n", time_str);
act_time = atol(time_str);
printf("Transformed time: %d\n", act_time);
return act_time;
}
导致回复:
实际时间:20170407091221 转型时间:1240669205
我希望这很容易理清,并提前感谢大家的帮助!
答案 0 :(得分:3)
您不能使用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);
答案 1 :(得分:1)
atol
将字符串转换为long
,在您的情况下可能是32位,因此不能保存值20170407091221
。您的值1240669205
是20170407091221
的低32位。
您可以在Windows上使用例如calc.exe
轻松检查:
20170407091221为十六进制:1258 49F3 1C15
1240669205为十六进制:49F3 1C15