STM32F103产生伪随机数
来源:互联网 发布:arcmap栅格数据矢量化 编辑:程序博客网 时间:2024/05/21 10:32
最近做有线网关,需要在stm32f103这个平台生成一串随机数作为局域网身份认证token,stm32f103和f2,f4不同,没有随机数发生器,于是考虑用C的标准库结合定时器时间来实现.主要用到的两个函数是srand和rand.
srand和rand()配合使用产生伪随机数序列。
rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。
如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。
srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。
通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。
{
int flag, i;
srand(time_clock); //将time_clock改成某个悬空adc值adcvalue也行
for (i = 0; i < length - 1; i++)
{
flag = rand()%3;
switch (flag)
{
case 0:
string = 'A' + rand() % 26;
break;
case 1:
string = 'a' + rand() % 26;
break;
case 2:
string = '0' + rand() % 10;
break;
default:
string = 'x';
break;
}
}
string[length - 1] = '\0';
srand和rand()配合使用产生伪随机数序列。
rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。
如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。
srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。
通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。
srand()函数:
头文件:#include<stdlib.h>
原型:void srand(unsigned int seed);
rand()函数:
头文件:#include<time.h>
例子参见srand()函数百度百科。
其实实现还是挺简单的,在你的文件里面包含两个头文件,直接调用以上的函数就行,至于需要修改的seed,目前采用的方法主要两种,一种是采用定时器时间seed,一种是采用读取某个悬空引脚adc的数值作为seed.
举例:
时间作为seed的方法。
void genRandomString(int length,char*string){
int flag, i;
srand(time_clock); //将time_clock改成某个悬空adc值adcvalue也行
for (i = 0; i < length - 1; i++)
{
flag = rand()%3;
switch (flag)
{
case 0:
string = 'A' + rand() % 26;
break;
case 1:
string = 'a' + rand() % 26;
break;
case 2:
string = '0' + rand() % 10;
break;
default:
string = 'x';
break;
}
}
string[length - 1] = '\0';
}
另附:
有软件产生随机数的函数,可以去百度一下 基本原理是这样的: 先设置一个seed 通过一个复杂的运算,算出一个结果 输出结果并把结果当成新的seed再进行这个运算。 也就是说,产生的不是真正随机的数,但是由于输出,输入之间很复杂,可以认为是随
阅读全文
0 0
- STM32F103产生伪随机数
- 循环中产生伪随机数
- 循环中产生伪随机数
- 关于VC产生伪随机数
- BASE64的伪随机数产生
- 循环中产生伪随机数
- 常见的伪随机数产生
- C++各种产生伪随机数的问题
- 游戏中伪随机数的产生
- rand和srand产生伪随机数总结
- 伪随机数产生原理及用法
- 用rand()和srand()产生伪随机数
- c#循环中产生伪随机数
- 产生伪随机数的魔术公式--源码
- FPGA产生基于LFSR的伪随机数
- 游戏中伪随机数的产生
- 产生伪随机数两种常用算法
- FPGA产生基于LFSR的伪随机数
- Kylin实例Cube实验
- scanner的详细解答用法
- 君正X系列开发---shell编程3
- 昨天读了一本《外星人就在月球背面》,有点颠覆我的科学观...
- ECE、UDC、EUDC、NEDC、FTP75工况的解释和区别
- STM32F103产生伪随机数
- vue-cli创建的项目中引入第三方库报错 'caller', 'calle', and 'arguments' properties may not be...
- 【简单的线性DP】SDUT 3924 疯狂的bLue
- RCNN目标识别简单笔记
- [官方解决方案]Windows上Python2和3如何兼容
- 工具类:网络判断+字符转字节+网络请求
- 奇葩APP盘点,程序员们创意真多
- Spring+SpringMVC+Mybatis使用注解方式配置双数据源
- 数组与指针