【发布时间】:2015-06-02 18:32:35
【问题描述】:
在 PHP 源代码函数 uniqid() 中有以下 C 代码: (我删除了一些类型以缩短它)
//...
struct timeval tv;
gettimeofday(&tv, NULL);
int sec = (int) tv.tv_sec;
int usec = (int) (tv.tv_usec % 0x100000);
// The max value usec can have is 0xF423F,
// so we use only five hex digits for usecs.
printf("%08x%05x", sec, usec);
//...
如果我们抛开批评,他们会尝试生成 64 位时间戳。
0xF423F 可能是 CLOCKS_PER_SEC - 1(CLOCKS_PER_SEC 是十进制的 1000000),
但是这个 0x100000 来自哪里,使用模数而不是按位与的原因是什么?
【问题讨论】:
-
你的问题只有写代码的人才能真正回答,其他人只能猜测原因
-
我不同意你的看法。代码并不难解释,但我对毫秒性质的计算缺乏很好的理解。
-
what could be the reason除了作者本人之外,除了猜测之外,无法回答任何问题 -
天哪,这段代码太糟糕了
标签: php c unique-id gettimeofday timeval