繁体   English   中英

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

[英]How to use boost::uuids::uuid to convert to 128/64 bit numbers?

我使用以下代码从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;

它给我十六进制数字,例如:“ 0xCC5B9F6946EF4448A89EDB2042E0B084”。

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

在这种情况下,标准的C atoll和C ++ std :: stoll没有帮助。

UUID首选随机生成质量。

谢谢!

如果您只需要一个随机的64位无符号整数,则可以使用标准C ++ 11:

std::mt19937_64 engine(std::random_device{}());
std::uniform_int_distribution<uint64_t> distribution;
auto ui64 = distribution(engine);

现场演示

它以这种方式工作,但是熵需要研究:

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';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM