0

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

4

1 回答 1

0

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

或者你的意思是当前的模拟器是用 MSVC 构建的并且已经签名time_t,所以它不能运行嵌入式软件,你想用 MSVC 重建它以使用 unsigned time_t?MSVC 仅支持32 位和 64 位签名time_t,因此答案是否定的。如果time_t在您的平台上是 32 位类型(仅出现在非常旧的 MSVC 版本或带有 的较新的 32 位代码上_USE_32BIT_TIME_T并且软件在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;
    }
}
于 2020-05-10T03:42:19.450 回答