C++ 如何使用boost::uuids::uuid转换为128/64位数字?

C++ 如何使用boost::uuids::uuid转换为128/64位数字?,c++,boost,std,uuid,128-bit,C++,Boost,Std,Uuid,128 Bit,我使用以下代码从boost生成UUID: boost::uuids::random_generator gen; boost::uuids::uuid uuidId = gen(); string randomUUID = boost::lexical_cast<std::string>(uuidId); std::remove( randomUUID.begin(), randomUUID.end(), '-'); randomUUID = "0x" + randomUUID;

我使用以下代码从boost生成UUID:

boost::uuids::random_generator gen;
boost::uuids::uuid uuidId = gen();
string randomUUID = boost::lexical_cast<std::string>(uuidId);
std::remove( randomUUID.begin(), randomUUID.end(), '-');
randomUUID = "0x" + randomUUID;

boost::uuids::random_生成器gen;
boost::uuids::uuid-uuiid=gen();
字符串randomUUID=boost::词法转换(UUIID);
删除(randomUUID.begin(),randomUUID.end(),“-”);
randomUUID=“0x”+randomUUID;
它给我十六进制数字,比如:“0xCC5B9F6946EF4448A89EDB2042E0B084”

我的问题是:如何将这个字符串(128位十六进制数)转换为128长或64长(可以释放更高的数据)?

标准C环礁和C++ STD::Stol在本病例中没有帮助。

UUID优先用于随机生成质量


谢谢大家!

它是这样工作的,但熵需要研究:

typedef unsigned long long ull;
//...
ull ui64 = 0;
const int startPosition = 18;//can vary - we can use rand() too
const int lengthHex = 14;//can vary - we can use rand() too
boost::uuids::random_generator gen;
boost::uuids::uuid uuidId = gen();
string randomUUID = boost::lexical_cast<std::string>(uuidId);
std::remove( randomUUID.begin(), randomUUID.end(), '-');
randomUUID = "0x" + randomUUID.substr(startPosition, lengthHex);
ui64 = std::stoull(randomUUID, 0, 16); //random out of UUID
std::cout << ui64 << '\n';
typedef无符号长ull;
//...
ull ui64=0;
常数int startPosition=18//可以变化-我们也可以使用rand()
常数int lengthHex=14//可以变化-我们也可以使用rand()

boost::uuids::随机_生成器gen; boost::uuids::uuid-uuiid=gen(); 字符串randomUUID=boost::词法转换(UUIID); 删除(randomUUID.begin(),randomUUID.end(),“-”); randomUUID=“0x”+randomUUID.substr(起始位置,长度十六进制); ui64=std::stoull(randomUUID,0,16)//UUID随机输出
std::cout如果您只需要一个随机的64位无符号整数,那么您可以使用标准的C++11:

std::mt19937_64 engine(std::random_device{}());
std::uniform_int_distribution<uint64_t> distribution;
auto ui64 = distribution(engine);
std::mt19937_64引擎(std::random_设备{}());
标准:均匀分布;
自动ui64=分配(发动机);

.

使用UUID生成随机数是一个糟糕的想法。他们没有得到类似的熵,用梅森缠绕器之类的东西正确生成的随机数。自己做一个帮助,并实际使用C++标准库中生成的函数来生成随机数。同时获取UUID的子字符串是一个I have Mersener Twister,在我的例子中它看起来是这样的:I have Mersener Twister,在我的例子中它看起来是这样的:auto const seed=std::random_device();标准:mt19937 mt(种子);标准:统一内部分布区(1234567899999);长l1;长l2;for(int i=0;iboost::uuids::random_生成器使用Mersenne Twister。因此,没有理由期望它提供比直接使用Mersenne Twister更好的随机生成质量。而且,正如Mike所说,使用UUID的子字符串生成随机数似乎很奇怪。还有例外?!