我有一个简单的C ++函数,它调用“uuid_generate_random”。似乎生成的UUID不符合标准(UUID版本4)。任何想法?
我正在使用的代码是(uuid_generate_random& uuid_unparse函数在libuuid中可用):
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中的一个。
非常感谢任何输入。
此致 丹尼尔
答案 0 :(得分:1)
你说libuuid似乎没有遵守国际电联的建议是完全正确的......可以说这个建议本身对于保留版本信息过于迂腐,因为除了允许technorati轻松区分UUID已经生成,但这不是重点。
好消息是,如果你愿意的话,你可以通过简单的权利,在正确的版本位中粉碎,轻松地将它们变成符合要求的UUID。 : - )