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

相关推荐
QQ14220784491 小时前
没有这个数据库账户,难道受到了sql注入式攻击?
数据库·sql
残 风1 小时前
pg兼容mysql框架之语法解析层(openHalo开源项目解析)
数据库·mysql·开源
勇往直前plus1 小时前
MyBatis/MyBatis-Plus类型转换器深度解析:从基础原理到自定义实践
数据库·oracle·mybatis
cyhysr2 小时前
sql将表字段不相关的内容关联到一起
数据库·sql
九皇叔叔2 小时前
MySQL 数据库 MVCC 机制
数据库·mysql
此生只爱蛋2 小时前
【Redis】Set 集合
数据库·redis·缓存
bjzhang752 小时前
C#操作SQLite数据库
数据库·sqlite·c#
hans汉斯2 小时前
嵌入式操作系统技术发展趋势
大数据·数据库·物联网·rust·云计算·嵌入式实时数据库·汉斯出版社
小c君tt3 小时前
QT中想在QTextEdit控件中使用Qslog日志输出出现问题原因及解决方法
开发语言·qt
沙滩小绵羊3 小时前
Linux常见命令
linux·运维·服务器