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值的时间值没有意义。
哪种方式可以投射?
非常感谢任何建议,
答案 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内部更聪明,然后只是通过截断。