我需要生成一个随机数,现在这个数字需要介于10到120秒之间。 现在,在C中,我可以使用Random来完成此操作,但是我无法访问该功能。 为了尝试和聪明,我已经确定了一些随机数据,我可以访问无线扫描功能(实际上最终需要这个随机数),它为我提供了每个检测到的Wi-Fi信号的信号强度。
使用这个我以为我可以创建一个很好的随机数,但显然这会给出一个非常大的总和,需要在某种程度上缩小 - 这减少了不同随机数之间的潜在差异。
随机数将用作尝试互相连接的不同无线设备的退避计时器,显然随机数字可以实现更好。
有什么想法?也许有一种更简单的方法来实现这一目标? 感谢您的任何提示。
编辑:使帖子可读!
答案 0 :(得分:2)
对所有信号强度应用XOR并将其转换为整数或任何您需要的值。
或者,这或多或少是在C:
中定义rand()
的方式
static unsigned int next = 1;
int rand_r(unsigned int *seed)
{
*seed = *seed * 1103515245 + 12345;
return (*seed % ((unsigned int)RAND_MAX + 1));
}
int rand(void)
{
return (rand_r(&next));
}
void srand(unsigned int seed)
{
next = seed;
}
答案 1 :(得分:0)
标准库函数是rand()
,而不是Random()
;为什么你不能用它?对于它的所有潜在缺陷,它可能对退避定时器来说已经足够了,因为起始时间本身是由冲突和其他设备的异步动作随机化的。
人们可能会对这个函数的上述缺陷抒情,更多的是在其返回值中使用简单的模运算,但它是关于适用性和充分性,并且rand()在这方面是充分的情况下。