我在做一些嵌入式软件,其 time_t
是无符号32位整数。我有一个电脑模拟器,它的 time_t
似乎是有符号的32位整数。有什么方法可以告诉Visual C使用的是 uint32_t
?
这个问题不清楚。"嵌入式软件"、"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;
}
}