我正在做一些嵌入式软件,它time_t
是无符号的 32 位整数。我有一个 PC 模拟器,它time_t
似乎是有符号的 32 位整数。有没有办法告诉 Visual C 使用uint32_t
?
问问题
478 次
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 回答