
C/C 随机数生成方法1. 使用 rand() 和 srand()库:stdlib.h或cstdlib特点: 伪随机数生成器简单易用。示例:123456789#include stdlib.h#include time.hintmain() {srand(time(NULL));// 初始化随机数生成器intrandom_number rand() % 100;// 生成 0 到 99 之间的随机数printf(Random number: %d\n, random_number);return0;}2. 使用 random 库库:random特点: 提供了多种随机数生成器和分布。示例:123456789101112#include random#include iostreamintmain() {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库: 不需要特殊库直接通过文件操作读取。特点: 提供真随机数。示例:12345678910111213141516#include stdio.h#include stdlib.hintmain() {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特点: 提供硬件级别的真随机数。示例:123456789#include x86intrin.h#include stdio.hintmain() {unsignedintrandom_number;_rdrand32_step(random_number);// 可能需要多次尝试才能成功printf(Random number: %u\n, random_number % 100);return0;}5. 使用 OpenSSL 库库:openssl/rand.h特点: 提供高质量随机数适用于加密。示例:1234567891011121314#include openssl/rand.h#include stdio.hintmain() {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()因为它们生成的是伪随机数不适合用于加密。在选择随机数生成器时要考虑到性能和安全性之间的平衡。这些方法覆盖了从简单的伪随机数到高质量的真随机数生成的不同场景。