Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 随机发生器_C_Linux - Fatal编程技术网

C 随机发生器

C 随机发生器,c,linux,C,Linux,我试图找到一个c函数,它可以生成32位随机数/伪随机数,并且可以复制。(如rand/srand函数)。我不能使用Uradom,因为我不能像使用srand/rand那样复制序列。我是否必须编写自己的函数,或者类似的东西已经存在 谢谢 供将来参考,而其他人的建议是好的。我最后做了这样的事情: uint32_t generateRandom (unsigned int randomSeed) { uint32_t number = 0; int randomNumber, x; f

我试图找到一个c函数,它可以生成32位随机数/伪随机数,并且可以复制。(如rand/srand函数)。我不能使用Uradom,因为我不能像使用srand/rand那样复制序列。我是否必须编写自己的函数,或者类似的东西已经存在

谢谢

供将来参考,而其他人的建议是好的。我最后做了这样的事情:

uint32_t generateRandom (unsigned int randomSeed) {
   uint32_t number = 0;
   int randomNumber, x;

   for (x=0; x<8;x++) {
       randomNumber = rand_r(&randomSeed) % 16;
       number |= (randomNumber<<(x*4));
       randomSeed++;
   }
   return (number);
}
uint32\u t生成器域(无符号整数随机种子){
uint32_t编号=0;
int随机数,x;
对于(x=0;x任何或都可以。谷歌会发现你有很多最小的实现


正如评论中指出的那样,C标准函数+
rand也可以很好地工作,所以你应该使用它。

这些函数的很多编写方式都是a的变体。如果你想自己编写,我会这样做。

rand\u MAX在linux上是2147483647,所以如果你不想扩展up rand()(并消除一半的可能性),使用()并将返回值解释为无符号长

连接2(或更多)
rand()
结果,以获得所需的位数。
不好(因为它被夸大了)例如:

uint32\u t bit0=rand()&1;
uint32_t bit1=rand()&1;
/* ... */
uint32\u t bit31=rand()&1;

uint32_t total=bit0 |(bit1从您对问题的评论中,我无法理解您为什么不使用
rand()
srand()
。是因为它们不在正确的范围内吗?如果是,请执行以下操作:

uint32_t random_num;
int i, random_byte;
srand(SEED_VALUE);

random_num = 0;
for (i = 0; i < 4; i++) {
    random_byte = rand() & 0xff;
    random_num = (randum_num << 8) + random_byte;
}
uint32\u t random\u num;
int i,随机字节;
srand(种子值);
随机数=0;
对于(i=0;i<4;i++){
随机字节=rand()&0xff;

random_num=(randum_num为什么不直接使用rand/srand?您的哪些需求排除了使用
rand
/
srand
?我正在尝试写入一些内存位置(尝试打开和关闭某些位)为此,我需要生成一个32位整数,rand/sr,并且只接受一个无符号长整数……这给了我一个非常小的数字。您使用
number |=…
的解决方案(编辑的帖子)将生成非均匀分布(一些数字比其他数字更可能被选择)。请改用
number^=…
。@Falcata您的算法确实会返回一个伪随机数,但并非所有结果都具有相同的可能性,设置了许多位的b/c结果比设置了几个位的结果更有可能。因此,结果7的可能性比8的可能性大得多。谢谢!但有点太晚了:P I最终这样做了方法类似(参见编辑),但非常感谢:)
uint32_t random_num;
int i, random_byte;
srand(SEED_VALUE);

random_num = 0;
for (i = 0; i < 4; i++) {
    random_byte = rand() & 0xff;
    random_num = (randum_num << 8) + random_byte;
}