为什么 NDK GetCurrentTime 不正确?
why NDK GetCurrentTime incorrect?
我使用下面的代码
unsigned long long appUtils::GetCurrentTime() {
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
此代码在 OSX 平台上 运行s。 clang编译后输出为1618460301601,这个结果是正确的
我在NDK下,r17c r21d
unsigned long long xx = appUtils::GetCurrentTime();
LOGD("app current time: %u %llu %lld", xx, xx, xx);
// OUTPUT app current time: 3553827972 15263574918903831684 6951239348438933920
但是,我在模拟器或者手机phone上使用NDK编译和运行,会得到这个值3553827972
如何获取当前时间
%u
是错误的格式说明符,因为它对应于 unsigned int
,在所有相关平台上都是 32 位类型。值 1618460301601 至少需要 64 位,因此您需要使用 %llu
或 %lld
.
如果您为 32 位 ABI(例如 armeabi-v7a 或 x86)构建代码,那么对第一个参数使用不正确的 %u
说明符也会弄乱其他参数的打印,因为printf
-like 函数如何处理它们的整数参数。
我使用下面的代码
unsigned long long appUtils::GetCurrentTime() {
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
此代码在 OSX 平台上 运行s。 clang编译后输出为1618460301601,这个结果是正确的 我在NDK下,r17c r21d
unsigned long long xx = appUtils::GetCurrentTime();
LOGD("app current time: %u %llu %lld", xx, xx, xx);
// OUTPUT app current time: 3553827972 15263574918903831684 6951239348438933920
但是,我在模拟器或者手机phone上使用NDK编译和运行,会得到这个值3553827972 如何获取当前时间
%u
是错误的格式说明符,因为它对应于 unsigned int
,在所有相关平台上都是 32 位类型。值 1618460301601 至少需要 64 位,因此您需要使用 %llu
或 %lld
.
如果您为 32 位 ABI(例如 armeabi-v7a 或 x86)构建代码,那么对第一个参数使用不正确的 %u
说明符也会弄乱其他参数的打印,因为printf
-like 函数如何处理它们的整数参数。