将apr_time_t转换为不同的int类型

时间:2013-01-22 10:36:06

标签: c casting apr

gcc 4.7.2
c89
APR 1.4

您好,

我正在以32位模式编译我的程序,即-m32,因为我链接的一些库使用32位库。

我有以下结构:

struct tag_channel {
    apr_int32_t id;
    char *name;
};

对于id,我想要一个随机数,所以我使用的是APR:

apr_time_t time_secs = apr_time_sec(apr_time_now());

我想知道是否因为apr_time_sec返回apr_time_t类型而导致:

typedef apr_int64_t

我可以投入以下内容:

channel->id = (apr_int32_t)time_secs;

但是,我担心通过放弃而失去价值。

以下是64位,所以不确定这是否有用。

#define APR_TIME_T_FMT   APR_INT64_T_FMT

我不想将id的频道结构更改为apr_time_t,因为ID值的时间值没有意义。

哪种方式可以投射?

非常感谢任何建议,

1 个答案:

答案 0 :(得分:1)

考虑将apr_time_usec用于所需的随机数。 apr_time_usec似乎是“更随机”的,因为它返回了usecond部分(整个时间是sec + APR_USEC_PER_SEC * usec),并且根据定义保证在[0 .. 1000000]内,所以你可能不担心失去精度铸造。

如果使用秒,则不使用秒是至关重要的,那么您可以将随机数计算为

channel->id = (apr_int32_t) (apr_time_sec(apr_time_now()) % INT32_MAX)

(不要忘记包括limits.h)以便在32位diapason内部更聪明,然后只是通过截断。