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中常用的随机数处理方法。

相关推荐
坚定信念,勇往无前几秒前
Spring Boot中整合Flink CDC 数据库变更监听器来实现对MySQL数据库
数据库·spring boot·flink
荔枝荷包蛋66615 分钟前
【网络】高级IO——Reactor版TCP服务器
运维·服务器
史迪仔011223 分钟前
[SQL] 事务的四大特性(ACID)
数据库·sql
clarance201538 分钟前
聊聊 FocusSearch/focus_mcp_sql:Text2SQL 的新玩法
数据库·sql
GGGGGGGGGGGGGG.1 小时前
hapxory-ACL基础介绍及案例
运维·服务器·网络
Kerwin要坚持日更1 小时前
一文讲解Redis中的主从复制
数据库·redis·缓存
Suk-god1 小时前
【Redis】基础知识入门
数据库·redis·缓存
黑牛先生1 小时前
【Linux】匿名管道
linux·运维·服务器
begei1 小时前
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
数据库·django·sqlite