Генерация различных версий Boost UUID (универсальный уникальный идентификатор)

Я читал о повышении UUID. Я понимаю, что существуют различные способы генерации UUID, это определяется полем версии UUID. Этот документ показывает 5 разных версий UUID. API Boost UUID позволяет запрашивать UUID его версии. Но как установить версию? Повысить страницу документации показывает только один способ создания UUID, а именно:

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

Итак, не могли бы вы показать мне, как генерировать UUID на основе других 4 версий? Особенно версия 1, то есть генератор на основе времени, кажется мне очень интересным.

Также, скажите, пожалуйста, чем отличается версия UUID от ее варианта? Они оба звучат как одно и то же.

1

Решение

Я никогда раньше не использовал библиотеку Uuid из Boost, но я немного просмотрел код, и кажется, что version а также variant из uuid основан на generator ты используешь.

Есть несколько видов генераторов, например, random_generator а также name_generator. Каждый генератор будет иметь свои собственные значения version а также variant это впрыснет в результирующий uuid,

Это прямо из исходного кода, обратите внимание, как варианты и версии отличаются для двух генераторов.

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector