【发布时间】:2013-07-13 10:33:19
【问题描述】:
我有一部分规范要求我创建一个随机 64 位数字,并将以下内容转换为字符串: (0 到 2^63 - 1)
我不知道括号中的意思是什么,有人可以帮忙吗?
【问题讨论】:
-
什么编程语言、平台、环境等?
-
好的 - 我已经在下面发布了一个 C 答案,移植到 C# 应该很简单。
我有一部分规范要求我创建一个随机 64 位数字,并将以下内容转换为字符串: (0 到 2^63 - 1)
我不知道括号中的意思是什么,有人可以帮忙吗?
【问题讨论】:
括号是 0 到 2^63-1 之间的随机 64 位数字的集合构建符号,不包括 0 和 2^63-1。
【讨论】:
由于您没有指定编程语言,我将在 C 中给出一个解决方案,然后您可以将其调整为您可能使用的任何编程语言,如果它不是 C(或近亲)。
您只需调用两次arc4random 并连接这些值:
#include <stdint.h>
#include <stdlib.h>
int64_t rand64(void)
{
uint64_t r_lo = (uint64_t)arc4random();
uint64_t r_hi = (uint64_t)arc4random();
return (int64_t)((r_hi << 31) | (r_low >> 1));
}
您可以很容易地将其转换为十六进制 ASCII 字符串:
char s[17];
int64_t r = rand64();
sprintf(s, "%16llx", r);
(如果您需要十进制或其他格式,则只需相应地修改sprintf 格式字符串。
【讨论】: