QUuid类
QUuid类用于存储通用唯一标识符(UUID)。 更多...
头文件 | #include <QUuid> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
继承自 |
注意: 此类中所有函数都是可重入的。
公共类型
(自6.6起) 联合 | Id128Bytes |
枚举 | StringFormat { WithBraces, WithoutBraces, Id128 } |
枚举 | Variant { VarUnknown, NCS, DCE, Microsoft,Reserved } |
枚举 | Version { VerUnknown, Time, EmbeddedPOSIX, Name, Md5, …, Sha1 } |
公共函数
QUuid() | |
QUuid(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8) | |
(自6.6起) | QUuid(QUuid::Id128Bytes id128, QSysInfo::Endian order = QSysInfo::BigEndian) |
QUuid(QAnyStringView text) | |
QUuid(const GUID &guid) | |
bool | isNull() const |
QByteArray | toByteArray(QUuid::StringFormat mode = WithBraces) const |
(自6.6起) QUuid::Id128Bytes | toBytes(QSysInfo::Endian order = QSysInfo::BigEndian) const |
CFUUIDRef | toCFUUID() const |
NSUUID * | toNSUUID() const |
QByteArray | toRfc4122() const |
QString | toString(QUuid::StringFormat mode = WithBraces) const |
(自6.6起) quint128 | toUInt128(QSysInfo::Endian order = QSysInfo::BigEndian) const |
QUuid::Variant | variant() const |
QUuid::Version | version() const |
GUID | operator GUID() const |
bool | operator!=(const QUuid &other) const |
bool | operator!=(const GUID &guid) const |
bool | operator<(const QUuid &other) const |
QUuid & | operator=(const GUID &guid) |
bool | operator==(const QUuid &other) const |
bool | operator==(const GUID &guid) const |
bool | operator>(const QUuid &other) const |
静态公共成员
QUuid | createUuid() |
QUuid | createUuidV3(const QUuid &ns, const QByteArray &baseData) |
QUuid | createUuidV3(const QUuid &ns, const QString &baseData) |
QUuid | createUuidV5(const QUuid &ns, const QByteArray &baseData) |
QUuid | createUuidV5(const QUuid &ns, const QString &baseData) |
(since 6.6) QUuid | fromBytes(const void *bytes, QSysInfo::Endian order = QSysInfo::BigEndian) |
QUuid | fromCFUUID(CFUUIDRef uuid) |
QUuid | fromNSUUID(const NSUUID *uuid) |
QUuid | fromRfc4122(QByteArrayView bytes) |
QUuid | fromString(QAnyStringView string) |
(since 6.6) QUuid | fromUInt128(quint128 uuid, QSysInfo::Endian order = QSysInfo::BigEndian) |
相关的非成员函数
size_t | qHash(const QUuid &uuid, size_t seed = 0) |
QDataStream & | operator<<(QDataStream &s, const QUuid &id) |
QDebug | operator<<(QDebug dbg, const QUuid &id) |
bool | operator<=(const QUuid &lhs, const QUuid &rhs) |
bool | operator>=(const QUuid &lhs, const QUuid &rhs) |
QDataStream & | operator>>(QDataStream &s, QUuid &id) |
详细描述
使用统一唯一标识符(UUID)是在分布式计算环境中唯一标识实体的标准方式。UUID是一种由某些算法生成,旨在保证在使用的分布式计算环境中UUID唯一的16字节(128位)数字。常缩写为GUID,即全局唯一标识符,但它指的也是同一件事。
实际上,GUID是UUID的一种变体。有多个变体在使用中。每个UUID都包含一个位域,用于指定它所属的UUID类型(变体)。调用variant()来发现QUuid实例中包含的是哪种类型的UUID。它会提取16字节中第8个字节的三个最高有效位。在QUuid中,第8个字节是QUuid::data4[0]
。如果你使用接受所有数值参数的构造函数创建QUuid实例,请使用以下表来设置参数b1
的最高三个有效位,它将成为QUuid::data4[0]
并包含其三个最高有效位的变体系数。在表中,“x”表示不重要。
msb0 | msb1 | msb2 | Variant |
---|---|---|---|
0 | x | x | NCS (网络计算系统) |
1 | 0 | x | DCE (分布式计算环境) |
1 | 1 | 0 | Microsoft (GUID) |
1 | 1 | 1 | 为未来扩展预留 |
如果variant()返回QUuid::DCE,则UUID还包含在QUuid::data3
的四个最高有效位中的版本字段,您可以调用version()来发现您的QUuid包含哪个版本。如果您使用接受所有数值参数的构造函数创建QUuid实例,请使用以下表来设置参数w2
的最高四个有效位,它将成为QUuid::data3
并包含其四个最高有效位的版本字段。
msb0 | msb1 | msb2 | msb3 | Version |
---|---|---|---|---|
0 | 0 | 0 | 1 | 时间 |
0 | 0 | 1 | 0 | 嵌入POSIX |
0 | 0 | 1 | 1 | Md5(名称) |
0 | 1 | 0 | 0 | 随机 |
0 | 1 | 0 | 1 | Sha1 |
表中列出的DCE版本的字段布局由网络工作组UUID规范指定。
大多数平台都提供了生成新UUID的工具,例如 uuidgen
和 guidgen
。您还可以使用 createUuid()(). 由 createUuid() 生成的UUID为随机类型。它们的 QUuid::Version 位数被设置为 QUuid::Random,并且它们的 QUuid::Variant 位数被设置为 QUuid::DCE。UUID的其余部分由随机数组成。从理论上讲,这意味着由 createUuid() 生成的UUID可能不唯一的概率很小。但是,这是一个非常小的概率。
UUID可以从数值或字符串构建,或使用静态的 createUuid() 函数。它们可以用 toString() 转换为字符串。UUID有一个 variant() 和一个 version(),null UUID从 isNull() 返回 true。
成员类型文档
enum QUuid::StringFormat
此枚举用于 toString(StringFormat) 控制字符串表示格式的格式。可能的值如下
常数 | 值 | 描述 |
---|---|---|
QUuid::WithBraces | 0 | 默认值,toString() 将返回五个十六进制字段,由破折号分隔,并被大括号包围。例如:{00000000-0000-0000-0000-000000000000}。 |
QUuid::WithoutBraces | 1 | 只有五个由破折号分隔的字段,没有大括号。例如:00000000-0000-0000-0000-000000000000。 |
QUuid::Id128 | 3 | 只显示十六进制数字,没有大括号或破折号。注意,QUuid 无法将此类输入还原为输入。 |
enum QUuid::Variant
此枚举定义了用于UUID的 variant字段 的值。variant字段中的值确定128位值的布局。
常数 | 值 | 描述 |
---|---|---|
QUuid::VarUnknown | -1 | variant是未知的 |
QUuid::NCS | 0 | 为NCS(网络计算系统)复合性保留 |
QUuid::DCE | 2 | 分布式计算环境,QUuid使用的方案 |
QUuid::Microsoft | 6 | 为微软复合性保留(GUID) |
QUuid::Reserved | 7 | 为未来定义保留 |
enum QUuid::Version
此枚举定义了用于UUID的 version字段 的值。version字段只在variant字段的值为 QUuid::DCE 时才有意义。
常数 | 值 | 描述 |
---|---|---|
QUuid::VerUnknown | -1 | version是未知的 |
QUuid::Time | 1 | 基于时间,通过使用时间戳、时钟序列和MAC网络卡地址(如果可用)作为节点部分 |
QUuid::EmbeddedPOSIX | 2 | DCE安全版本,带嵌入式POSIX UUID |
QUuid::Name | Md5 | 基于名称,通过使用名称的所有部分 |
QUuid::Md5 | 3 | 名称的别名 |
QUuid::Random | 4 | 基于随机数,通过使用所有部分的随机数 |
QUuid::Sha1 | 5 |
成员函数文档
[constexpr noexcept]
QUuid::QUuid()
创建空UUID。 toString() 将输出null UUID为 "{00000000-0000-0000-0000-000000000000}"。
[constexpr noexcept]
QUuid::QUuid(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8)
使用参数指定的值创建一个UUID,参数包括l、w1、w2、b1、b2、b3、b4、b5、b6、b7、b8。
示例
// {67C8770B-44F1-410A-AB9A-F9B5446F13EE} QUuid IID_MyInterface(0x67c8770b, 0x44f1, 0x410a, 0xab, 0x9a, 0xf9, 0xb5, 0x44, 0x6f, 0x13, 0xee);
[explicit noexcept, since 6.6]
QUuid::QUuid(QUuid::Id128Bytes id128, QSysInfo::Endian order = QSysInfo::BigEndian)
根据整数参数id128创建一个QUuid对象。输入参数id128被视为具有order字节序。
此功能从Qt 6.6开始引入。
另请参阅 fromBytes(),toBytes(),toRfc4122()和toUInt128。
[explicit noexcept]
QUuid::QUuid(QAnyStringView text)
创建一个由字符串text表示的QUuid对象,此字符串必须格式化为由"-"分隔的五个十六进制字段,例如"{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",其中每个'x'是十六进制数字。此处显示的花括号是可选的,但通常需要包含它们。如果转换失败,将创建一个空UUID。有关五个十六进制字段如何映射到QUuid公共数据成员的解释,请参阅toString。
注意: 在Qt 6.3之前的版本中,此构造函数由一个由QString,QByteArray和const char*
组成的重载集合构成,而不是一个接受QAnyStringView的构造函数。
[constexpr noexcept]
QUuid::QUuid(const GUID &guid)
将Windows guid转换为Qt QUuid。
警告: 此函数仅适用于Windows平台。
[静态]
QUuid QUuid::createUuid()
在Windows以外的任何平台上,此函数返回一个新的具有QUuid::DCE变体和QUuid::Random版本的UUID。在Windows上,使用Windows API生成GUID,其类型由API决定创建。
[static]
QUuid QUuid::createUuidV3(const QUuid &ns, const QByteArray &baseData)
此函数返回一个新的UUID,其变体为QUuid::DCE,版本为
另请参阅变体(),版本(),以及 createUuidV5。
[静态]
QUuid QUuid::createUuidV3(const QUuid &ns, const QString &baseData)
此函数返回一个新的UUID,其变体为QUuid::DCE,版本为
另请参阅变体(),版本(),以及 createUuidV5。
[静态]
QUuid QUuid::createUuidV5(const QUuid &ns, const QByteArray &baseData)
此函数返回一个新的UUID,其变体为QUuid::DCE,版本为
另请参阅变体(),版本(),以及 createUuidV3。
[静态]
QUuid QUuid::createUuidV5(const QUuid &ns, const QString &baseData)
此函数返回一个新的UUID,其变体为QUuid::DCE,版本为
另请参阅变体(),版本(),以及 createUuidV3。
[静态,自6.6版起]
QUuid QUuid::fromBytes(const void *bytes, QSysInfo::Endian order = QSysInfo::BigEndian)
使用字节顺序 order 从 bytes 中读取128位(16字节)并返回对应这些字节的 QUuid。如果字节顺序 order 为 QSysInfo::BigEndian,则此函数与 fromRfc4122() 所做的一样。
此功能从Qt 6.6开始引入。
另请参阅fromRfc4122。
[静态]
QUuid QUuid::fromCFUUID(CFUUIDRef uuid)
构建一个新的 QUuid,其中包含 uuid CFUUID 的副本。
注:此函数仅在 Apple 平台上可用。
[静态]
QUuid QUuid::fromNSUUID(const NSUUID *uuid)
构建一个新的 QUuid,其中包含 uuid NSUUID 的副本。
注:此函数仅在 Apple 平台上可用。
[静态,noexcept]
QUuid QUuid::fromRfc4122(QByteArrayView bytes)
从UUID的二进制表示形式创建 QUuid 对象,该表示形式由RFC 4122第4.1.2节指定。有关 bytes 所需顺序的解释,请参阅 toRfc4122()。
接受的字节数组不是人类可读格式。
如果转换失败,则创建一个空UUID。
注:在Qt 6.3之前的版本中,此函数使用 QByteArray,而不是 QByteArrayView。
另请参阅toRfc4122,QUuid,以及 fromBytes。
[static noexcept]
QUuid QUuid::fromString(QAnyStringView string)
从字符串 string 创建一个 QUuid 对象,该字符串必须格式化为由 '-' 分隔的五个十六进制字段,例如:"{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" 其中每个 'x' 都是一个十六进制数字。这里显示的花括号是可选的,但通常包含它们。如果转换失败,则返回空 UUID。请参阅 toString() 了解五个十六进制字段如何映射到 QUuid 中的公共数据成员。
注意:在 Qt 6.3 之前的版本中,此函数由一个包含 QStringView 和 QLatin1StringView 的重载集组成,而不是一个接收 QAnyStringView 的函数。
[static constexpr noexcept, since 6.6]
QUuid QUuid::fromUInt128(quint128 uuid, QSysInfo::Endian order = QSysInfo::BigEndian)
基于整数 uuid 参数创建一个 QUuid。输入参数 uuid 被认为是具有 order 字节顺序。
注意:此函数仅存在于提供 128 位整数类型的平台上。
此功能从Qt 6.6开始引入。
另请参阅:toUInt128(),fromBytes(),toBytes() 和 toRfc4122()。
[noexcept]
bool QUuid::isNull() const
如果这是空 UUID {00000000-0000-0000-0000-000000000000},则返回 true
;否则返回 false
。
QByteArray QUuid::toByteArray(QUuid::StringFormat mode = WithBraces) const
返回此 QUuid 的字符串表示形式,格式由 mode 参数控制。从左到右,五个十六进制字段按以下方式从 QUuid 的四个公共数据成员中获取
字段编号 | 来源 |
---|---|
1 | data1 |
2 | data2 |
3 | data3 |
4 | data4[0] .. data4[1] |
5 | data4[2] .. data4[7] |
[noexcept, since 6.6]
QUuid::Id128Bytes QUuid::toBytes(QSysInfo::Endian order = QSysInfo::BigEndian) const
返回一个在由 order 指定的字节顺序中从此 QUuid 创建的 128 位 ID。如果顺序是 QSysInfo::BigEndian,则此函数的二进制内容与 toRfc4122() 相同。请参阅该功能以获取更多详细信息。
此功能从Qt 6.6开始引入。
另请参阅:toRfc4122(),fromBytes() 和 QUuid。
CFUUIDRef QUuid::toCFUUID() const
从 QUuid 创建一个 CFUUID。
调用者拥有 CFUUID,并负责释放它。
注:此函数仅在 Apple 平台上可用。
NSUUID *QUuid::toNSUUID() const
从 QUuid 创建一个 NSUUID。
NSUUID 会被自动释放。
注:此函数仅在 Apple 平台上可用。
QByteArray QUuid::toRfc4122() const
返回此 QUuid 的二进制表示形式。字节数组以大端格式存储,并根据RFC 4122第4.1.2节“布局和字节顺序”进行格式化。
顺序如下:
字段编号 | 来源 |
---|---|
1 | data1 |
2 | data2 |
3 | data3 |
4 | data4[0] .. data4[7] |
此函数返回的字节数组中的字节包含与toBytes()相同的二进制内容。
另请参阅toBytes()。
QString QUuid::toString(QUuid::StringFormat mode = WithBraces) const
返回此 QUuid 的字符串表示形式,格式由 mode 参数控制。从左到右,五个十六进制字段按以下方式从 QUuid 的四个公共数据成员中获取
字段编号 | 来源 |
---|---|
1 | data1 |
2 | data2 |
3 | data3 |
4 | data4[0] .. data4[1] |
5 | data4[2] .. data4[7] |
[constexpr noexcept, since 6.6]
quint128 QUuid::toUInt128(QSysInfo::Endian order = QSysInfo::BigEndian) const
返回从指定的 order 字节序创建的128位整数 QUuid。如果字节序为 QSysInfo::BigEndian,则此函数的二元内容与toRfc4122()相同。有关详细信息,请参阅该函数。
注意:此函数仅存在于提供 128 位整数类型的平台上。
此功能从Qt 6.6开始引入。
另请参阅toRfc4122(),fromUInt128(),toBytes(),fromBytes() 和 QUuid。
[noexcept]
QUuid::Variant QUuid::variant() const
返回UUID的variant字段中的值。如果返回值是QUuid::DCE,请调用version()以查看它使用哪种布局。空UUID被视为未知变体。
另请参阅version。
[noexcept]
QUuid::Version QUuid::version() const
如果UUID的variant字段是QUuid::DCE,则返回UUID的version字段。否则返回QUuid::VerUnknown。
另请参阅variant。
[constexpr noexcept]
GUID QUuid::operator GUID() const
从 QUuid 返回一个Windows GUID。
警告: 此函数仅适用于Windows平台。
[constexpr noexcept]
bool QUuid::operator!=(const QUuid &other) const
如果此 QUuid 和 other QUuid 不同,则返回 true
;否则返回 false
。
[constexpr noexcept]
bool QUuid::operator!=(const GUID &guid) const
如果此UUID不等于Windows GUID guid,则返回 true
;否则返回 false
。
[noexcept]
bool QUuid::operator<(const QUuid &other) const
如果此 QUuid 具有与 other QUuid 相同的 变体字段 且字典序上小于 other QUuid,则返回 true
。如果 other QUuid 具有不同的变体字段,则返回值由比较两个 变体 决定。
另请参阅variant。
[constexpr noexcept]
QUuid &QUuid::operator=(const GUID &guid)
将 Windows guid 分配给 Qt QUuid。
警告: 此函数仅适用于Windows平台。
[constexpr noexcept]
bool QUuid::operator==(const QUuid &other) const
如果此 QUuid 和 other QUuid 相同,则返回 true
;否则返回 false
。
[constexpr noexcept]
bool QUuid::operator==(const GUID &guid) const
如果此 UUID 等于 Windows GUID guid,则返回 true
;否则返回 false
。
[noexcept]
bool QUuid::operator>(const QUuid &other) const
如果此 QUuid 具有与 other QUuid 相同的 变体字段 且字典序上大于 other QUuid,则返回 true
。如果 other QUuid 具有不同的变体字段,则返回值由比较两个 变体 决定。
另请参阅variant。
相关非成员函数
[noexcept]
size_t qHash(const QUuid &uuid, size_t seed = 0)
返回 UUID uuid 的哈希值,使用 seed 作为计算种子。
QDataStream &operator<<(QDataStream &s, const QUuid &id)
将 UUID id 写入数据流 s。
QDebug operator<<(QDebug dbg, const QUuid &id)
将 UUID id 写入调试信息输出流 dbg。
[noexcept]
bool operator<=(const QUuid &lhs, const QUuid &rhs)
如果 lhs 具有与 rhs 相同的 变体字段 且在字典序上不大于 rhs,则返回 true
。如果 rhs 具有不同的变体字段,则返回值由比较两个 变体 决定。
另请参阅variant。
[noexcept]
bool operator>=(const QUuid &lhs, const QUuid &rhs)
如果 lhs 与 rhs 具有相同的 变体字段 且依次序 不早于 rhs,则返回 true
。如果 rhs 具有不同的变体字段,则返回值由比较两个 变体 决定。
另请参阅variant。
QDataStream &operator>>(QDataStream &s, QUuid &id)
从流 s 读取 UUID 到 id。
© 2024 Qt 公司有限。本文件中的文档贡献的版权属于其各自的拥有者。本文件包含的文档按照由自由软件基金会发布的 GNU 自由文档许可版本 1.3 的条款提供许可。Qt 和相关标志是芬兰和/或其他世界各地的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。