如何在64位系统上以32位宽度存储时间?

时间:2017-03-07 21:14:58

标签: c

我的结构如下:

typedef struct  ERROR_LOG_EVENT
{
    time_t time;
    uint32_t count;
    int32_t error_type;
} ERROR_LOG_EVENT;

我将此结构存储在非易失性存储器中。 在32位系统上,一切正常,因为time_t宽度为4个字节(32位)。

但是在64位系统上time_t变为8字节(64位)宽。

有没有办法在64位系统上的4byte(32bit)存储时间? 我可以用总是保证为32位的东西替换上述结构的time_t time成员吗?

3 个答案:

答案 0 :(得分:1)

如果您的目标是内存空间优化(代价是访问速度较慢,时间限制为2106),那么您应该将结构定义为packed以抑制填充:

typedef struct __attribute__((__packed__)) ERROR_LOG_EVENT {
    uint32_t time;
    uint32_t count;
    int32_t error_type;
} ERROR_LOG_EVENT;

然后像这样分配: ERROR_LOG_EVENT.time = <time_t> & 0xFFFFFFFF;

答案 1 :(得分:0)

调整代码以正确处理64位时间戳。具体来说,写一些看起来像

的东西
typedef struct  ERROR_LOG_EVENT
{
    int64_t time;
    uint32_t count;
    int32_t error_type;
} ERROR_LOG_EVENT;

并强制您的32位代码使用此代码。不要尝试使用32位整数存储时间间隔。这总是一个坏主意,并且在你遇到问题之前就已经过了oh;哦,设计要求发生了变化,我们实际上想要节省纳秒,而不是秒......&#34; / p>

答案 2 :(得分:-1)

使用uint32_t。如果这些是unix纪元时间,那么这将足以存储不比2105年further的时间戳。

相关问题