后台接口要求传个流水单号,流水号的格式是:"设备序列号""设备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中常用的随机数处理方法。