2013-01-22 68 views
0
gcc 4.7.2 
c89 
APR 1.4 

你好,鑄造apr_time_t不同int型

我編譯我的程序在32位模式下即-m32一些我在使用32位庫鏈接庫。

我有以下結構:

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

因爲我想有一個隨機數,所以我現在用的是APR的ID:

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

考慮使用apr_time_usec爲所需的隨機數。 apr_time_usec似乎是「更隨機」,因爲它返回的是第二部分(整個時間是sec + APR_USEC_PER_SEC * usec),根據定義保證在[0 .. 1000000]以內,所以你可以不用擔心放棄精確性。

如果使用秒,而不是useconds是至關重要的,那麼你可以計算你的隨機數作爲

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

(不要忘了包括limits.h),以適應它裏面的32位音域一些聰明那麼僅僅通過截斷。