随机字节流我想测试的网络程序 基本上它发送分组到使用UDP/TCP 欲产生一些随机字节远程服务器流 希望的功能是一样生成与`C`
u_char* gen_rdm_bytestream(int num_bytes)
{
u_char* stream=malloc(num_bytes);
.....
// here how to generate?
....
return stream;
}
谢谢!
随机字节流我想测试的网络程序 基本上它发送分组到使用UDP/TCP 欲产生一些随机字节远程服务器流 希望的功能是一样生成与`C`
u_char* gen_rdm_bytestream(int num_bytes)
{
u_char* stream=malloc(num_bytes);
.....
// here how to generate?
....
return stream;
}
谢谢!
对于每个字节,可以调用随机数生成器函数。 C标准提供了功能rand
。在使用之前,您应该先拨打srand
来初始化随机序列。然后
gen_rdm_bytestream
可能看起来类似的东西:
#include <stdlib.h>
#include <time.h>
unsigned char *gen_rdm_bytestream (size_t num_bytes)
{
unsigned char *stream = malloc (num_bytes);
size_t i;
for (i = 0; i < num_bytes; i++)
{
stream[i] = rand();
}
return stream;
}
srand ((unsigned int) time (NULL));
由于stream
是无符号的,如果rand
返回的值大于UCHAR_MAX
时,她就会减少(模UCHAR_MAX
)。因此,你会得到的伪随机数0至255之间,并
如果'srand(nr)'中的'nr'是固定的,那么生成的字节总是相同的,无论平台是什么,对吧? – user138126 2013-03-25 18:35:49
@ user138126:不一定,因为每个平台都没有相同的随机数生成器。但是,例如使用“time”函数可以解决问题。 – md5 2013-03-25 18:37:33
你可以沟槽rand()和srand()并使用arc4random()获得更好的结果。 – 2016-03-10 00:07:14
是的,你在C int rand (void);
功能,
返回0和RAND_MAX之间的范围内的伪随机整数。 RAND_MAX是一个常数定义。
该数字由算法生成,该算法每次调用时都会返回一系列明显不相关的数字。该算法采用了种子,通过函数生成的系列,它应该被初始化为一些独特的价值srand().
编辑:
如你评论,我已经写了代码,你可以帮助您演示如何使用兰特(),程序和它的输出是:
#include <stdio.h>
#include <stdlib.h> /* srand, rand */
#include <time.h>
int main(){
int i=0;
srand (time(NULL));
printf("Five rand numbers: \n");
for(i = 1; i <= 5; i++){
printf("\n %d", rand());
}
printf("Five rand numbersb between 2 to 5: \n");
for(i = 1; i <= 5; i++){
printf("\n %d", (2 + rand()%4));
}
return 1;
}
输出:
Five rand numbers:
1482376850
1746468296
1429725746
595545676
1544987577
Five rand numbers, between 2 to 5:
2
5
3
4
3
这是'int',它们是4个字节 – user138126 2013-03-25 18:15:29
@ user138126'int'的大小取决于C中的平台。在Linux系统中,您可以使用sizeof(int)运算符 – 2013-03-25 18:17:41
来检查其大小。我的意思是我需要随机字节,在这里它是随机的4字节单位 – user138126 2013-03-25 18:22:22
下面是在给定的范围内产生随机整数值一般功能:
#include <stdlib>
/**
* Assumes srand has already been called
*/
int randInRange(int min, int max)
{
double scale = 1.0/(RAND_MAX + 1);
double range = max - min + 1;
return min + (int) (rand() * scale * range);
}
利用它来创建签名char
值:
u_char randomByte()
{
return (u_char) randInRange(0, 255);
}
所以,
for (i = 0; i < numBytes; i++)
stream[i] = randomByte();
您可能需要使用标准l尝试返回随机数的库函数 – 2013-03-25 18:11:49
'malloc'内存在某种意义上已经是'random'后。这不是真正的随机,而是充满了_trash_。我认为它应该足够用于测试,我不认为你需要密码强的随机生成器。 – maverik 2013-03-25 18:15:09