【问题标题】:why NDK GetCurrentTime incorrect?为什么 NDK GetCurrentTime 不正确?
【发布时间】:2021-04-15 04:51:17
【问题描述】:

我使用下面的代码

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, xx);
// OUTPUT app current time: 3553827972 15263574918903831684 6951239348438933920

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

【问题讨论】:

  • 我有包含头文件

标签: android android-ndk gettimeofday


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 2020-05-25
    • 2019-08-07
    • 2011-11-12
    • 2018-06-24
    相关资源
    最近更新 更多