Qt生成随机数的方法

ops/2024/12/23 4:34:53/

后台接口要求传个流水单号,流水号的格式是:“设备序列号”“设备MAC地址”“20位的随机数”。
具体的是:
“设备序列号”:就是烧录工具写入设备的序列编号,这就不多说了,读出来就行;
“设备MAC地址”:通过读取本机设备的MAC地址,并要求去掉MAC里的冒号;
“20位的随机数”:要求包含大写,小写,和数字的20位随机数;
本篇先说下随机数的获取
直接上代码:
获取20位的随机数,包含字母大小写和数字

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()”产生随机数,比如要做其他的随机数处理,只需要这样调用:

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()方法生成指定范围内的随机数,有:

//生成区间 [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)

看看使用方法:

//包含头文件
#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中常用的随机数处理方法。


http://www.ppmy.cn/ops/144225.html

相关文章

【Spring】Spring的模块架构与生态圈—Spring Boot、Spring Cloud与Spring Security

随着互联网的发展&#xff0c;企业对快速开发和高可用性的需求不断增加&#xff0c;Spring生态系统&#xff08;包括Spring Boot、Spring Cloud和Spring Security&#xff09;应运而生&#xff0c;为Java开发提供了强大的支持。 在实际应用中&#xff0c;Spring Boot使得开发者…

基于SpringBoot的“旅游管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“旅游管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 旅游管理系统结构图 管理员登录首页界面图 用户管…

科技巨头Cisco遭攻击,黑客提供 2.9 GB 数据样本下载

总结 部分数据泄露&#xff1a;黑客于 2024 年 12 月 16 日在泄露论坛上泄露了 2.9GB 的思科数据。 暴露的记录&#xff1a;泄露的数据是一个 4.5TB 数据集的一部分&#xff0c;据称该数据集在 2024 年 10 月未受到思科的保护。 以前的事件&#xff1a;IntelBroker 之前声称…

R square 的计算方法和一点思考

模型的性能评价指标有几种方案&#xff1a;RMSE&#xff08;平方根误差&#xff09;、MAE&#xff08;平均绝对误差&#xff09;、MSE(平均平方误差)、R2_score 其中&#xff0c;当量纲不同时&#xff0c;RMSE、MAE、MSE难以衡量模型效果好坏。这就需要用到R2_score&#xff1…

SQL SERVER日常运维巡检系列之-实例级参数

前言 做好日常巡检是数据库管理和维护的重要步骤&#xff0c;而且需要对每次巡检日期、结果进行登记&#xff0c;同时可能需要出一份巡检报告。 本系列旨在解决一些常见的困扰&#xff1a; 不知道巡检哪些东西不知道怎么样便捷体检机器太多体检麻烦生成报告困难&#xff0c;无…

前端XMLHttpRequest get请求能不能在body中传参数?

文档 查看mdn文档&#xff0c;文档XMLHttpRequest.send()有提到&#xff1a; XMLHttpRequest.send() 方法接受一个可选的参数&#xff0c;其作为请求主体&#xff1b;如果请求方法是 GET 或者 HEAD&#xff0c;则应将请求主体设置为 null。 测试 一个简单的nodejs服务器 var…

flutter --no-color pub get 超时解决方法

新建Flutter项目后&#xff0c;运行报错&#xff0c;需要执行pub get 点击Run ‘flutter pub get’ … … … 卡着&#xff0c;不动了&#xff0c;提示超时 是因为墙的问题 解决方案&#xff1a; 添加以下环境变量 变量名: PUB_HOSTED_URL 变量值: https://pub.flutter-io.cn …

android源码下载

如果是虚拟机 切换桥接模式 1 mkdir ~/bin、PATH~/bin:$PATH 2 curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo 3 chmod x ~/bin/repo 4 设置git 全局用户名 邮箱 5 设置缓存 git config --global http.postBuffer 5000000000 6 设置清华源&#xf…