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

相关推荐
KawYang29 分钟前
xxl-job 整合 Seatunnel 实现定时任务
linux·服务器·数据库
qq_2518364571 小时前
asp.net多媒体教室管理系统VS开发sqlserver数据库web结构c#编程计算机网页项目
数据库·c#·asp.net
十年之少1 小时前
使用国内镜像网站在线下载安装Qt(解决官网慢的问题)——Qt
开发语言·qt
德迅云安全杨德俊1 小时前
云服务器防御DDOS的方案
服务器·安全·web安全·ddos
不修×蝙蝠1 小时前
搭建Tomcat(六)---Response的实现
java·服务器·tomcat·response
计算机毕设定制辅导-无忧学长1 小时前
MySQL 实战:小型项目中的数据库应用(二)
数据库·mysql
goomind1 小时前
OpenCV与Qt5构建卡尺找直线工具
人工智能·qt·opencv·计算机视觉·卡尺找直线·卡尺工具
鱼大大博客1 小时前
Edge Scdn用起来怎么样?
数据库
夜间看海1 小时前
52 基于单片机的超声波、温湿度、光照检测分阶段报警
数据库·单片机·mongodb
The_SkyUzi1 小时前
安装与配置MongoDB 6.0以支持远程连接
数据库·mongodb