【发布时间】:2013-10-19 01:16:02
【问题描述】:
我正在做一些嵌入式软件,它的time_t 是无符号的 32 位整数。我有一个 PC 模拟器,其 time_t 似乎是有符号的 32 位整数。有什么方法可以告诉 Visual C 使用uint32_t?
【问题讨论】:
标签: c visual-c++ unsigned int32 time-t
我正在做一些嵌入式软件,它的time_t 是无符号的 32 位整数。我有一个 PC 模拟器,其 time_t 似乎是有符号的 32 位整数。有什么方法可以告诉 Visual C 使用uint32_t?
【问题讨论】:
标签: c visual-c++ unsigned int32 time-t
问题不清楚。 “嵌入式软件”、“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;
}
}
【讨论】: