秒级时间为种子,生成随机字符串
//产生长度为length的随机字符串
int genRandomString(int length,char* ouput)
{
int flag, i;
time_t t;
t=time(NULL);
Printf("%ld",t);
srand((unsigned)t);
for (i = 0; i < length - 1; i++)
{
flag = rand() % 3;
switch (flag)
{
case 0:
ouput[i] = 'A' + rand() % 26;
break;
case 1:
ouput[i] = 'a' + rand() % 26;
break;
case 2:
ouput[i] = '0' + rand() % 10;
break;
default:
ouput[i] = 'x';
break;
}
}
return 0;
}
这种方法,在连续调用几次,生成多个随机文件名的场景中,文件名是相同的,不能达到目的,因为时间太短了。
微秒级时间生成随机字符串(限定字母数字)
//产生长度为length的随机字符串
int genRandomString2(int length,char* ouput)
{
int flag, i;
struct timeval tpstart;
gettimeofday(&tpstart,NULL);
srand(tpstart.tv_usec);
for (i = 0; i < length - 1; i++)
{
flag = rand() % 3;
switch (flag)
{
case 0:
ouput[i] = 'A' + rand() % 26;
break;
case 1:
ouput[i] = 'a' + rand() % 26;
break;
case 2:
ouput[i] = '0' + rand() % 10;
break;
default:
ouput[i] = 'x';
break;
}
}
return 0;
}
微秒级时间生成随机字符串
/*
* Descriptions:获取一个字节随机数
* Parameters:
* [In]: None
* [Out]: None
* Return: 返回随机数值0x00-0xFF
* Remarks:
*/
unsigned char get_one_byte_randrom()
{
struct timeval tpstart;
int r = 0;
gettimeofday(&tpstart,null);
srand(tpstart.tv_usec);
r = rand()%255;
return r;
}
/*******************************************************************************
**
** Function Rand_Get
** Description 获取随机数
** Returns None
**
*******************************************************************************/
void Rand_Get(unsigned char *pOutBuf,unsigned int nLen)
{
int i = 0;
for(i=0;i<nLen;i++)
{
pOutBuf[i] = get_one_byte_randrom();
}
}
演示“伪随机数”的例子:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int get_randrom()
{
int r = 0;
srand( (unsigned)time( NULL ) );//初始化随机数
r = rand()%255;
return r;
}
int main(){
printf("Hello World!\n");
int ret = 0;
while((ret = get_randrom())!=10){
printf("%d\r\n",ret);
}
printf("while stop:(%d\r\n)",ret);
return 0;
}
运行会发现随机数是批量相同的