将time_t设置为无符号32位的int。

问题描述 投票:1回答:1

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

c unsigned signed time-t int32
1个回答
0
投票

这个问题不清楚。"嵌入式软件"、"PC模拟器 "和 "Visual C "之间的关系如何?如果嵌入式软件运行在PC模拟器上,那么... 其怎么 time_符号不同?

或者你的意思是说,目前的模拟器是用MSVC建立的,并且已经签署了协议。time_t 所以它不能运行嵌入式软件,而你想用MSVC重建它,使用无符号的 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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.