详解QUuid类的使用

QUuid 是 Qt 框架中的一个类,用于生成、操作和表示全局唯一标识符(Universally Unique Identifier, UUID)。UUID 是一种标准格式的 128 位数字,通常用 32 个十六进制数表示,并且包含分隔符和特定的版本信息,以确保其全球范围内的唯一性。QUuid 类提供了多种便利的方法来生成 UUID、检查其有效性、转换其格式以及进行比较等操作。以下是对 QUuid 使用的详细说明及相应的代码示例。

1. 生成 UUID

要生成一个 UUID,只需调用 QUuid 类的静态方法 createUuid()。这个方法会在内部使用适当的机制(如操作系统提供的随机数生成器或网络接口信息)来生成一个全局唯一的 UUID。

#include <QUuid>// 生成一个 UUID
QUuid uniqueId = QUuid::createUuid();// 打印生成的 UUID(默认带花括号和连字符)
std::cout << "Generated UUID: " << uniqueId.toString().toStdString() << std::endl;

输出类似于:

Generated UUID: {123e4567-e89b-12d3-a456-426655440000}

2. 转换 UUID 格式

生成的 UUID 可以转换为不同格式的字符串,以便于显示或存储。QUuid 提供了 toString() 函数,接受一个 QUuid::StringFormat 枚举值作为参数,用于指定输出格式。常见的格式有:

  • QUuid::Default: 使用默认格式,即带有花括号和连字符的标准 UUID 格式。
  • QUuid::WithoutBraces: 去掉花括号,但保留连字符。
  • QUuid::WithoutDashes: 去掉花括号和连字符,形成一个连续的 32 位十六进制字符串。

例如:

QUuid uuid = QUuid::createUuid();// 不带花括号的 UUID 字符串
QString noBraces = uuid.toString(QUuid::WithoutBraces);
std::cout << "Without braces: " << noBraces.toStdString() << std::endl;// 不带连字符的 UUID 字符串
QString noDashes = uuid.toString(QUuid::WithoutDashes);
std::cout << "Without dashes: " << noDashes.toStdString() << std::endl;

输出可能如下:

Without braces: 123e4567-e89b-12d3-a456-426655440000
Without dashes: 123e4567e89b12d3a456426655440000

3. 检查 UUID 是否为空

有时需要验证一个 QUuid 实例是否代表一个有效的非空 UUID。这时可以使用 isNull() 方法:

QUuid emptyUuid;if (emptyUuid.isNull()) {std::cout << "The UUID is null." << std::endl;
} else {std::cout << "The UUID is not null." << std::endl;
}QUuid nonEmptyUuid = QUuid::createUuid();
if (nonEmptyUuid.isNull()) {std::cout << "The UUID is null." << std::endl;
} else {std::cout << "The UUID is not null." << std::endl;
}

输出:

The UUID is null.
The UUID is not null.

4. 将 UUID 转换为字节数组

若需要以二进制形式处理 UUID,可以调用 toByteArray() 方法将其转换为 QByteArray

QUuid uuid = QUuid::createUuid();
QByteArray uuidBytes = uuid.toByteArray();// 输出字节数组的大小(应为 16)
std::cout << "UUID byte array size: " << uuidBytes.size() << std::endl;

5. 从字符串或字节数组还原 UUID

已经存在的 UUID 字符串可以通过 QUuid 的构造函数直接转换回 QUuid 对象:

QString uuidString = "123e4567-e89b-12d3-a456-426655440000";
QUuid parsedUuid(uuidString);std::cout << "Parsed UUID: " << parsedUuid.toString().toStdString() << std::endl;

同样,从字节数组还原 UUID 也可以通过构造函数实现:

QByteArray uuidBytes = ...; // 假设已有一个包含 16 字节的 UUID 字节数组
QUuid fromBytes(uuidBytes);std::cout << "UUID from bytes: " << fromBytes.toString().toStdString() << std::endl;

6. 比较 UUID

QUuid 类支持常用的比较操作,如等于 (==)、不等于 (!=)、小于 (<)、大于 (>) 等。这些比较基于 UUID 的数值表示,而不是字符串表示:

QUuid uuid1 = QUuid::createUuid();
QUuid uuid2 = QUuid::createUuid();if (uuid1 == uuid2) {std::cout << "UUIDs are equal." << std::endl;
} else {std::cout << "UUIDs are not equal." << std::endl;
}

7. 使用 UUID 作为键

由于 UUID 的唯一性,它们常被用作数据库键、文件名、网络请求标识符等。例如,存储用户账户信息时,可以将生成的 UUID 作为主键:

// 假设 User 结构体有一个 QUuid id 成员
User newUser;
newUser.id = QUuid::createUuid();
// ... 其他属性赋值 ...// 将新用户保存到数据库,使用 UUID 作为主键
saveUserToDatabase(newUser.id, newUser);

以上就是对 QUuid 类的详细使用介绍及其对应的代码示例,涵盖了生成、格式转换、检查空值、字节转换、解析、比较和作为键等常见应用场景。在实际编程中,根据具体需求选择合适的方法即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/811437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0点起C语言

用sizeof()来查看在你的平台上到底占用多少你多少字节的内存。 Int x sizeof(int); Int xsizeof(shrt int); Int xsizeof(long); Int xsizeof(long double); 等等。 http://www.enet.com.cn/article/2012/0822/A20120822153730_2.shtml #—是个预处理的标志&#xff0c;表示对文…

PCIe总线-存储器域和PCIe总线域访问流程(二)

1.概述 PCIe总线的最大特点是像CPU访问DDR一样&#xff0c;可以直接使用地址访问PCIe设备&#xff08;桥&#xff09;&#xff0c;但不同的是DDR和CPU同属于存储器域&#xff0c;而CPU和PCIe设备属于两个不同的域&#xff0c;PCIe设备&#xff08;桥&#xff09;的地址空间属于…

【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算(针对多输入单输出回归预测模型)

【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算&#xff08;针对多输入单输出回归预测模型&#xff09; 因matlab的xgboost训练模型不含敏感性分析算法&#xff0c;本文通过使用single算法&#xff0c;即单特征因素对输出影响进行分析&#xff0c;得出不同…

【教学类-52-01】20240411动物数独(4宫格)宫格图

作品展示 背景需求&#xff1a; 一、下载图片 PS修图&#xff08;图片长宽一样&#xff0c;把动物图片上下拉长&#xff09; 二、数独结构分析&#xff1a; 1、这是一个四宫格的数独题&#xff0c; 2、将1234换成了四种小动物图片。 于是我去找到原来做过的一个代码&#xf…

CAP定理和BASE定理

CAP定理 CAP理论为&#xff1a;一个分布式系统最多只能同时满足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition tolerance&#xff09;这三项中的两项。 —致性(Consistency) 一致性指"all n…

秒杀优化-异步秒杀思路

6、秒杀优化 6.1 秒杀优化-异步秒杀思路 我们来回顾一下下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进行串行操作&#xff0c;分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足…

【c语言】atoi函数---使用和模拟实现(详解)

atoi函数---使用和模拟实现 atoi函数在Cplusplus中的定义 atoi函数的使用 #include <stdio.h> #include <stdlib.h>int main() {char arr[20] "4831213";int ret 0;ret atoi(arr);printf("arr:%s\n", arr);printf("ret:%d\n", re…

openstack之neutron介绍

核心组件 neutron-server&#xff1a;提供API接口&#xff0c;把对应的api请求传给plugin进&#xff1b; neutron-plugin&#xff1a;管理逻辑网络状态&#xff0c;调用agent&#xff1b; neutron-agent&#xff1a;在provider network上创建网络对象&#xff1b; neutron-…

EaticSearch学习

ES学习目标 1、全文检索 2、ES介绍 2.1 安装&#xff08;docker&#xff09; docker pull elasticsearch:7.14.0 docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" elasticsearch:7.14.0初步检索 1、_cat GET /_cat/nodes&#xff1a;查看所…

oracle记录

文章目录 表操作查询表占用内存大小 表操作 查询表占用内存大小 select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_nameupper(表名);

【二分算法】

17. 二分查找&#xff08;easy&#xff09; 算法流程&#xff1a; 算法代码&#xff1a; int search(int* nums, int numsSize, int target) {// 初始化 left 与 right 指针int left 0, right numsSize - 1;// 由于两个指针相交时&#xff0c;当前元素还未判断&#xff0c;因…

C++traits

traits C的标准库提供了<type_traits>,它定义了一些编译时基于模板类的接口用于查询、修改类型的特征&#xff1a;输入的时类型&#xff0c;输出与该类型相关的属性 通过type_traits技术编译器可以回答一系列问题&#xff1a;它是否为数值类型&#xff1f;是否为函数对象…

AI工程师Devin的诞生,开启软件开发新纪元

Devin的诞生 最近&#xff0c;初创公司Cognition推出了一款名为Devin的全球首位AI工程师。尽管成立时间不到两个月&#xff0c;但公司拥有十名天才工程师&#xff0c;引起了行业内程序员的高度关注。研发团队在社交媒体上发布了一段演示视频&#xff0c;展示Devin的能力。 用户…

idea项目编译时报错:GC overhead limit exceeded

问题描述 今天idea构建一个新的项目时报错&#xff1a;GC overhead limit exceeded&#xff0c;错误是发生在编译阶段&#xff0c;而不是运行阶段。 ava: GC overhead limit exceeded java.lang.OutOfMemoryError: GC overhead limit exceededat com.sun.tools.javac.resources…

【ZZULIOJ】1061: 顺序输出各位数字(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 输入一个不大于10的9次方的正整数&#xff0c;从高位开始逐位分割并输出各位数字。 输入 输入一个正整数n,n是int型数据 输出 依次输出各位上的数字&#xff0c;每一个数字后面有一个空格…

python连接mysql数据库通用类

在 Python 中创建一个通用的数据库连接类&#xff0c;用于连接 MySQL 数据库并执行常见的数据库操作&#xff0c;可以提高代码的复用性和可维护性。下面是一个示例&#xff1a; python import mysql.connector class MySQLDatabase: def __init__(self, host, user, pass…

【高精度算法专题】【蓝桥杯备考训练】:高精度加法、高精度减法、高精度乘法、高精度除法【已更新完成】

目录 1、高精度加法 2、高精度减法 3、高精度乘法 4、高精度除法 1、高精度加法 给定两个正整数&#xff08;不含前导 0&#xff09;&#xff0c;计算它们的和。 输入格式 共两行&#xff0c;每行包含一个整数。 输出格式 共一行&#xff0c;包含所求的和。 数据范围 1≤…

OOCT WPF_D3D项目报错无法加载依赖项

运行示例项目报错缺少dll&#xff0c;发现运用了这个大老李&#xff0c;通过添加PATH路径也无法解决&#xff0c;看到debug文件夹下面没有其他的依赖项。 通过depneds工具可以看到 OCCTProxy_D3D.dll 缺少依赖项&#xff0c;图中的缺项都是OCCT生成的模块dll所以讲这些dll从..…

Java 中文官方教程 2022 版(五十)

原文&#xff1a;docs.oracle.com/javase/tutorial/reallybigindex.html 更多信息 原文&#xff1a;docs.oracle.com/javase/tutorial/jaxb/intro/info.html 有关 JAXB、XML 和 XML Schema 的更多信息&#xff0c;请参见&#xff1a; Java 社区进程页面&#xff1a; jcp.org/en…

DNS与DDNS

DNS&#xff08;Domain Name System&#xff09;和 DDNS&#xff08;Dynamic Domain Name System&#xff09;都关系到域名与IP地址的转换&#xff0c;但它们之间有一些关键的区别&#xff1a; DNS DNS 是互联网上用来将域名转换成IP地址的系统。当您在Web浏览器中输入一个网…