微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 NDK GetCurrentTime 不正确?

如何解决为什么 NDK GetCurrentTime 不正确?

我使用以下代码

unsigned long long appUtils::GetCurrentTime() {
    struct timeval tv;
    gettimeofday(&tv,NULL);
    return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}

代码在 OSX 平台上运行。 clang编译后,输出为1618460301601,这个结果是正确的 我在 NDK 下,r17c r21d

unsigned long long  xx = appUtils::GetCurrentTime();
LOGD("app current time: %u %llu %lld",xx,xx);
// OUTPUT app current time: 3553827972 15263574918903831684 6951239348438933920

但是我用NDK在模拟器或者手机上编译运行,会得到这个值35538​​27972 如何获取当前时间

解决方法

%u 是错误的格式说明符,因为它对应于 unsigned int,在所有相关平台上都是 32 位类型。值 1618460301601 至少需要 64 位,因此您需要使用 %llu%lld

如果您为 32 位 ABI(例如 armeabi-v7a 或 x86)构建代码,那么对第一个参数使用不正确的 %u 说明符也会弄乱其他参数的打印,原因是printf 之类的函数处理它们的整数参数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。