news 2026/10/29 11:09:38

C++随机数生成的五种方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++随机数生成的五种方法

C/C++ 随机数生成方法

1. 使用 rand() 和 srand()

  • 库:<stdlib.h>或<cstdlib>
  • 特点: 伪随机数生成器,简单易用。
  • 示例:

1

2

3

4

5

6

7

8

9

#include <stdlib.h>

#include <time.h>

intmain() {

srand(time(NULL));// 初始化随机数生成器

intrandom_number =rand() % 100;// 生成 0 到 99 之间的随机数

printf("Random number: %d\n", random_number);

return0;

}

2. 使用 <random> 库

  • 库:<random>
  • 特点: 提供了多种随机数生成器和分布。
  • 示例:

1

2

3

4

5

6

7

8

9

10

11

12

#include <random>

#include <iostream>

intmain() {

std::random_device rd;// 真随机数生成器

std::mt19937 gen(rd());// Mersenne Twister 引擎

std::uniform_int_distribution<> dis(0, 99);// 生成 0 到 99 之间的整数

intrandom_number = dis(gen);

std::cout <<"Random number: "<< random_number << std::endl;

return0;

}

3. 使用 /dev/random 和 /dev/urandom

  • 库: 不需要特殊库,直接通过文件操作读取。
  • 特点: 提供真随机数。
  • 示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include <stdio.h>

#include <stdlib.h>

intmain() {

FILE*file =fopen("/dev/urandom","rb");

unsignedcharrandom_byte;

if(fread(&random_byte, 1, 1, file) != 1) {

perror("fread");

exit(EXIT_FAILURE);

}

fclose(file);

intrandom_number = random_byte % 100;

printf("Random number: %d\n", random_number);

return0;

}

4. 使用硬件随机数生成指令

  • 库:<x86intrin.h>
  • 特点: 提供硬件级别的真随机数。
  • 示例:

1

2

3

4

5

6

7

8

9

#include <x86intrin.h>

#include <stdio.h>

intmain() {

unsignedintrandom_number;

_rdrand32_step(&random_number);// 可能需要多次尝试才能成功

printf("Random number: %u\n", random_number % 100);

return0;

}

5. 使用 OpenSSL 库

  • 库:<openssl/rand.h>
  • 特点: 提供高质量随机数,适用于加密。
  • 示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include <openssl/rand.h>

#include <stdio.h>

intmain() {

unsignedcharrandom_bytes[4];// 生成 4 字节随机数

if(!RAND_bytes(random_bytes,sizeof(random_bytes))) {

printf("RAND_bytes failed\n");

return1;

}

unsignedintrandom_number = *(unsignedint*)random_bytes;

printf("Random number: %u\n", random_number % 100);

return0;

}

选择合适的随机数生成方法

  • 伪随机数生成器 (rand(),<random>): 适用于对随机性要求不高的场合,如游戏开发中的简单随机事件。
  • 真随机数生成器 (/dev/urandom, OpenSSL, 硬件随机数生成器): 适用于安全性要求高的场合,如密码学应用、加密密钥生成。

注意事项

  • 使用/dev/random时要注意,如果系统熵池中的熵不够,读取/dev/random可能会阻塞,直到有足够的熵产生。
  • 对于安全性敏感的应用,应避免使用rand()和srand(),因为它们生成的是伪随机数,不适合用于加密。
  • 在选择随机数生成器时,要考虑到性能和安全性之间的平衡。

这些方法覆盖了从简单的伪随机数到高质量的真随机数生成的不同场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 13:01:33

题解:洛谷 P1303 A*B Problem

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…

作者头像 李华
网站建设 2026/10/28 14:20:41

加密流量检测:不解密也能识别恶意TLS行为

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/20 1:40:47

平台定制不失控:三级架构拆解交互、业务与数据接入

1. 我为什么开始琢磨“平台定制交互三级架构”这件事做平台产品的人应该都有过这种经历&#xff1a;售前拍着胸脯跟客户保证“我们平台完全支持定制”&#xff0c;然后需求文档传到研发手里&#xff0c;开发一看&#xff0c;差点当场离职。客户要的不是换个Logo换套皮肤&#x…

作者头像 李华
网站建设 2026/10/20 12:46:44

openrig开放硬件框架:基于2020铝型材的模块化实验台搭建指南

1. 为什么会有openrig&#xff1a;从固定设备到开放平台的折腾史我最初做电子和机械原型的时候&#xff0c;最大的痛点是设备不通用。今天要测一个传感器组合&#xff0c;明天要搭一套小型机械臂&#xff0c;后天又想搞个温湿度记录台。市面上现成的仪器要么功能固定&#xff0…

作者头像 李华