一.背景
在开发的过程中有时候我们需要使用到随机数。举个可能使用到的场景,在需要通信的功能时,我们希望自己制定的协议不会轻易被别人破解,那么我们可以在发送的协议中设置一个放置随机数的字段,在制定协议的时候,将产生的随机数,合并到正常数据一起进行校验,这样虽然是同样功能的指令,但每次发送的数据可能不一样,则导致破解难度会提高不少。
如何产生随机数呢?
现在有专门的随机数产生的硬件芯片,不过不在我们这里讨论的范围。这里我们讨论的是使用软件产生随机数。
二.产生随机数
2.1 rand() 函数
在C语言中我们需要用 rand() 函数来产生随机数,在C语言中rand()函数所对应的头文件为:stdlib.h
其产生随机数的范围为0——RAND_MAX,这里的RAND_MAX 是一个值。
例程
由上图的例程我们可以看到产生了一个随机数83,但是每次都是同一个数,这咋回事,这样还随机个啥,别急!
2.2 srand() 函数
在使用 rand() 函数时需要用 srand() 函数设置随机数种子。
例程
加上了一个以时间作为基数的种子,产生的随机数就是不断变化的。时间是一直累加的所以srand()函数的输入是一直变化的,这样产生的随机数理论上更随机。
如果我们使用在嵌入式开发里面,可以在一个时基里面不断累加某个计数器作为srand()函数的输入,以此产生时间累加的同样效果。