我有一个简单的C++函数,它调用“uuid_generate_random”。似乎生成的UUID不符合标准(UUID版本4)。有任何想法吗?

我正在使用的代码是(libuuid中提供了uuid_generate_random和uuid_unparse函数):

char uuidBuff[36];
uuid_t uuidGenerated;
uuid_generate_random(uuidGenerated);
uuid_unparse(uuidGenerated, uuidBuff);

我知道“uuid_generate_random”会生成UUID版本4,但是,返回的字符串类似于:
Run1) 2e9dc3c5-426a-eea0-8186-f6b65b5dc361
Run2) 112c6a78-51bc-cbbb-ae9c-92a33e1fd95f
Run3) 5abd3d6d-0259-ce5c-8428-a51bacc04c0f
Run4) 66a22485-7e5f-e5c2-a317-c1b295bf124f

看来它返回整个字符串的随机字符。维基百科的定义应采用以下形式:

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,其中x带有任何十六进制数字,而y只能是8、9,A或B之一。

任何输入将不胜感激。

问候
丹尼尔

最佳答案

您是完全正确的,libuuid似乎并未遵循国际电联的建议...可以说,该建议本身过于保留版本信息,因为它的目的不外在于让technorati轻松区分UUID是生成的,但这不重要。

好消息是,如果您愿意,可以通过将正确的版本位粉碎的简单简便方法,轻松地将它们变成一致的UUID。 :-)

关于c++ - 在Solaris上的uuid_generate_random(libuuid),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3759410/

10-13 06:57