【问题标题】:Set time_t to unsigned 32-bit int将 time_t 设置为无符号 32 位 int
【发布时间】:2013-10-19 01:16:02
【问题描述】:

我正在做一些嵌入式软件,它的time_t 是无符号的 32 位整数。我有一个 PC 模拟器,其 time_t 似乎是有符号的 32 位整数。有什么方法可以告诉 Visual C 使用uint32_t

【问题讨论】:

    标签: c visual-c++ unsigned int32 time-t


    【解决方案1】:

    问题不清楚。 “嵌入式软件”、“PC 模拟器”和“Visual C”如何相互关联?如果嵌入式软件在 PC 模拟器上运行,那么他们的time_s 怎么会有不同的符号

    或者你的意思是当前的模拟器是用 MSVC 构建的并且已经签署了time_t,所以它不能运行嵌入式软件,你想用 MSVC 重建它以使用未签名的time_t? MSVC 只支持32 and 64-bit signed time_t,所以答案是。如果time_t 是您平台上的 32 位类型(仅出现在非常旧的 MSVC 版本或带有_USE_32BIT_TIME_T 的较新的 32 位代码上)并且该软件无法在 year 2038 之后运行那么不需要转换。否则你需要用 VS2015+ 重建以使用 64 位 time_t 并编写一个小包装器来转换传递给模拟器时的值

    // Returns true if the time fits in uint32_t
    bool simulator_gettime(uint32_t *time)
    {
        time_t systemtime;
        time(&systemtime);
        if (difftime(systemtime, (time_t)0xFFFFFFFLL) > 0)
        {
            *time = systemtime;
            return true;
        }
        else // overflow an unsigned 32-bit value
        {
            *time = 0xFFFFFFFFU;
            return false;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-03
      • 2012-06-28
      • 2023-03-11
      • 2016-03-26
      • 2011-11-12
      • 1970-01-01
      • 2011-01-17
      • 2012-03-18
      相关资源
      最近更新 更多