Qt生成随机数的方法

后台接口要求传个流水单号,流水号的格式是:"设备序列号""设备MAC地址" "20位的随机数"。

具体的是:

"设备序列号":就是烧录工具写入设备的序列编号,这就不多说了,读出来就行;

"设备MAC地址":通过读取本机设备的MAC地址,并要求去掉MAC里的冒号;

"20位的随机数":要求包含大写,小写,和数字的20位随机数;

本篇先说下随机数的获取

直接上代码:
获取20位的随机数,包含字母大小写和数字

cpp 复制代码
QString MyWidget::getRandomString(int length)
{
//以当前时间的毫秒数作为种子设置随机数种子
qsrand(QDateTime::currentMSecsSinceEpoch());
const char ch[] = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int size = sizeof(ch);
char* str = new char[length + 1];
int num = 0;
for (int i = 0; i < length; ++i)
{
//这里内部生成随机数其实用的C++的rand()函数
    num = rand() % (size - 1);
    str[i] = ch[num];
}

QString res(str);
return res;
}

前面的"qsrand"是Qt 中用于设置随机数种子的函数,代码中"QDateTime::currentMSecsSinceEpoch()"是以当前时间的毫秒数作为种子,当然你也可以使用当前时间来组我欸随机数种子"qsrand(QTime::currentTime().second());"。

随机数种子是在生成随机数时所使用的初始值,给定相同的种子,它将生成相同的随机数序列。因此,为了得到不同的随机数序列,需使用不同种子,时间序一直在前进,所以很多人都喜欢用当前时间作为种子。

你也可以使用"qrand()"产生随机数,比如要做其他的随机数处理,只需要这样调用:

cpp 复制代码
qsrand(QDateTime::currentMSecsSinceEpoch());
//例:产生0~10以内
int num=qrand()%10;
//例:产生20~50以内
int num=qrand()%20 + 30;
//例:产生0~100以内
int num=qrand()%100;
//例:产生100~200以内
int num=qrand()%100+100;
//例:产生16~85以内(随变说的一个范围,记住规则:qrand()%(max-min)+min)
int num=qrand()%(85-16)+16;

另外,Qt 5.10 后,使用 QRandomGenerator 生成随机数。

其中:

generate()方法生成32位的随机数;

generate64()方法生成64位的随机数;

generateDouble()方法生成 [0, 1) 区间内的浮点数;

bounded()方法生成指定范围内的随机数,有:

cpp 复制代码
//生成区间 [0,highest) 内的随机双精度浮点数
double bounded(double highest);
//生成区间 [0,highest) 内的 quint32 随机数
quint32 bounded(quint32 highest);
//随机数区间 [lowest,highest)
quint32 bounded(quint32 lowest, quint32 highest);
//生成区间 [0,highest) 内的 int 随机数
int bounded(int highest);
//生成区间 [lowest,highest) 内的 int 随机数
int bounded(int lowest, int highest);
//生成区间 [0,highest) 内的 quint64 随机数
quint64 bounded(quint64 highest);
//随机数区间 [lowest,highest)
qint64 bounded(qint64 lowest, qint64 highest)

看看使用方法:

cpp 复制代码
//包含头文件
#include <QRandomGenerator>
//这样使用
QRandomGenerator* gen1 = new QRandomGenerator(QDateTime::currentMSecsSinceEpoch());
int num = gen1->generate();
//或者,使用静态方法 QRandomGenerator* global()
int num2 = QRandomGenerator::global()->generate();
//也可以使用global()的bounded()的方法产生[0,100)范围的随机数
int num3 = QRandomGenerator::global()->bounded(100);
//也可以使用global()的bounded()的方法产生[100,357)范围的随机数
qint64 num4 = QRandomGenerator::global()->bounded(100,357);

以上就是Qt中常用的随机数处理方法。

相关推荐
咕噜签名-铁蛋6 小时前
DDoS攻击:网络安全的隐形风暴
服务器
码农阿豪6 小时前
兼容是基石,超越是未来:金仓数据库的三重革新
数据库
2022.11.7始学前端6 小时前
n8n第十三节 三个节点测试技巧
运维·服务器·n8n
廋到被风吹走6 小时前
【数据库】【Redis】基本概念和特点
数据库·redis·缓存
榮十一6 小时前
10道SQL练习题及答案
数据库·sql·算法
张泽腾667 小时前
Ubuntu 扩容
linux·服务器·嵌入式硬件
Hns.7 小时前
MySQL慢SQL问题查找与优化方案
数据库·sql·mysql
专业开发者7 小时前
思科以终端产品解决方案提供商的身份实现效能提升
运维·服务器·网络
一水鉴天7 小时前
整体设计 定稿 之6 完整设计文档讨论及定稿 之3 整体设计原则(原型-过程-模块三阶联动体系)
前端·数据库·人工智能
管理大亨7 小时前
企业级ELK:从日志收集到业务驱动
java·大数据·网络·数据库·elk·elasticsearch