生成各种版本的Boost UUID(通用唯一标识符)

3

我在了解Boost UUID。我知道有各种方式生成UUID,取决于UUID的版本字段。 这个文档 展示了5种不同版本的UUID。Boost UUID API允许您查询UUID的版本。但是如何设置版本呢?Boost文档页面 只展示了一种创建UUID的方式,如下所示 -

boost::uuids::uuid u = boost::uuids::random_generator()();

您好,能否请您告诉我如何基于其他4个版本生成UUID? 特别是版本1,即基于时间的生成器,对我来说非常有趣。

另外,请问UUID版本与其变体有什么不同? 它们听起来很相似。

1个回答

1
我以前从未使用过Boost的Uuid库,但我稍微查看了一下代码,似乎uuidversionvariant是基于您使用的generator。有多种类型的生成器,例如random_generatorname_generator。每个生成器都会将自己的versionvariant值注入到生成的uuid中。这是直接来自源代码,要注意两个生成器的变体和版本是不同的。

random_generator.hpp

// 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

name_generator.hpp

// 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

基于时间的生成器,即版本1对我来说似乎最有趣。您能否提供任何建议,告诉我在哪里可以找到如何使用它来生成UUID的信息?我在文档中没有看到相关内容。 - The Vivandiere
仅浏览这四个生成器的代码,第一眼看起来似乎没有一个生成“版本1”的UUID的生成器。 - Colin Basnett
首先,您可能想查看Mahonri Moriancumer的UUID和GUID生成器和取证链接,以更好地了解RFC 4122变体的每个版本的结构。 - Mahonri Moriancumer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接