2016-03-07 333 views
1

我正在读关于Boost UUID的内容。我明白生成UUID有多种方式,这由UUID的版本字段决定。 This document显示5个不同版本的UUID。 Boost UUID API允许您为其版本查询UUID。但是,如何设置版本?该Boost documentation page只显示了一个创建UUID的方式,具体如下 -生成各种版本的Boost UUID(通用唯一ID)

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

所以,你可以请告诉我如何根据其他4个版本生成的UUID?尤其是版本1,即基于时间的发生器对我来说似乎非常有趣。

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

回答

1

我从来没有使用从升压的UUID库之前,但仔细端详一下代码,它似乎好像versionuuidvariant是基于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 
+0

基于时间的产生,即1版本似乎是最让我感兴趣的。你可以提供任何建议,我可以找到它如何被用来生成UUID?我没有在文档中看到它。 –

+0

只需仔细阅读四个生成器中的代码,无论如何,乍一看都不会出现生成器生成“版本1”的UUID。 –

+0

@首先,您可能想要查看** Mahonri Moriancumer的 UUID和GUID生成器和取证** [链接](http://www.mahonri.info/cgi/uuid.cgi)以了解如何更好地了解每个版本的RFC 4122变体都是结构化的。 –