gpt4 book ai didi

将 apr_time_t 转换为不同的 int 类型

转载 作者:行者123 更新时间:2023-11-30 15:52:24 25 4
gpt4 key购买 nike

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;

但是,我担心因类型转换而造成值(value)损失。

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

#define APR_TIME_T_FMT   APR_INT64_T_FMT

我不想将 id 的 channel 结构更改为 apr_time_t,因为 ID 值具有时间值实际上没有意义。

哪种转换方式最好?

非常感谢您的建议,

最佳答案

考虑使用apr_time_usec作为所需的随机数。 apr_time_usec 似乎“更随机”,因为它返回 usecond 部分(整个时间是 sec + APR_USEC_PER_SEC * usec )并且保证在 [0 .. 1000000] 内> 根据定义,因此您不必担心类型转换会失去精度。

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

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

(不要忘记包含 limits.h)以将其放入 32 位音叉中,比仅通过截断更智能。

关于将 apr_time_t 转换为不同的 int 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14456551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com