C++ 生成各种版本的Boost UUID(通用唯一ID)

C++ 生成各种版本的Boost UUID(通用唯一ID),c++,boost,uuid,distributed,distributed-computing,C++,Boost,Uuid,Distributed,Distributed Computing,我在读关于Boost UUID的书。我知道有多种生成UUID的方法,这取决于UUID的版本字段。显示了UUID的5个不同版本。boostuuidapi允许您查询UUID的版本。但是如何设置版本呢?仅显示了创建UUID的一种方法,如下所示- boost::uuids::uuid u = boost::uuids::random_generator()(); 那么,您能告诉我如何基于其他4个版本生成UUID吗?特别是第1版,即基于时间的生成器对我来说非常有趣 另外,你能告诉我UUID版本和它的变体

我在读关于Boost UUID的书。我知道有多种生成UUID的方法,这取决于UUID的版本字段。显示了UUID的5个不同版本。boostuuidapi允许您查询UUID的版本。但是如何设置版本呢?仅显示了创建UUID的一种方法,如下所示-

boost::uuids::uuid u = boost::uuids::random_generator()();
那么,您能告诉我如何基于其他4个版本生成UUID吗?特别是第1版,即基于时间的生成器对我来说非常有趣


另外,你能告诉我UUID版本和它的变体有什么不同吗?它们听起来都是一样的。

我以前从未使用过Boost中的Uuid库,但我仔细阅读了一下代码,似乎
Uuid的
版本和
变体是基于您使用的
生成器的

例如,有多种类型的发电机和。每个生成器都有自己的
version
variant
值,它将注入结果
uuid

这直接来自源代码,请注意两个生成器的变体和版本是如何不同的

随机发生器 name_generator.hpp
基于时间的生成器,即版本1,对我来说似乎是最有趣的。你能给我一些建议,让我知道如何使用它来生成UUID吗?我在文档中没有看到它。只要仔细阅读四个生成器的代码,乍一看,似乎没有生成“版本1”UUID的生成器。@首先,您可能希望查看Mahonri Moriancumer的UUID和GUID生成器以及取证,以便更好地了解RFC 4122变体的每个版本是如何构造的。
// set variant
// must be 0b10xxxxxx
*(u.begin()+8) &= 0xBF;
*(u.begin()+8) |= 0x80;

// set version
// must be 0b0100xxxx
*(u.begin()+6) &= 0x4F; //0b01001111
*(u.begin()+6) |= 0x40; //0b01000000
// set variant
// must be 0b10xxxxxx
*(u.begin()+8) &= 0xBF;
*(u.begin()+8) |= 0x80;

// set version
// must be 0b0101xxxx
*(u.begin()+6) &= 0x5F; //0b01011111
*(u.begin()+6) |= 0x50; //0b01010000