2016-03-07 31 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變體都是結構化的。 –