字符串中boost uuid的大小返回36

字符串中boost uuid的大小返回36,boost,uuid,boost-uuid,Boost,Uuid,Boost Uuid,我试图使用boost::uuid生成16个字符的uuid字符串,但它返回36个字符 boost::uuids::uuid uid == boost::random_generator()(); std::cout << size of uid:" << uid.size << std::endl; //always 16 std::stringstream ss; ss<< uid; std::string s = ss.str(); std::c

我试图使用boost::uuid生成16个字符的uuid字符串,但它返回36个字符

boost::uuids::uuid uid == boost::random_generator()();
std::cout << size of uid:" << uid.size << std::endl; //always 16
std::stringstream ss;
ss<< uid;
std::string s = ss.str();
std::cout << "size of uid:" << s.size() << std::endl; // always 36
boost::uuids::uuid uid==boost::random_生成器();
std::cout根据,这段代码应该为您提供一个16个字符的字符串:

#include <boost/uuid/uuid.hpp>            // uuid class
#include <boost/uuid/uuid_generators.hpp> // generators
#include <boost/uuid/uuid_io.hpp>         // streaming operators etc.
boost::uuids::uuid uid = boost::random_generator()();
std::string s(uid.size());
std::copy(u.begin(), u.end(), s.begin());
#包括//uuid类
#包括//发电机
#包括//流媒体运营商等。
boost::uuids::uuid uid=boost::random_生成器();
std::字符串s(uid.size());
复制(u.begin(),u.end(),s.begin());

但是,它不是ASCII字符串,而是字节字符串。由于ASCII可以用2个十六进制字符表示字节,因此ASCII中的UUID有32个字符加上4个分隔符,即36。所以您已经有了正确的代码:)

我已经尝试过了,但它没有复制ascii字符。它有一些我无法打印的二进制字符。事件我试图用std::hex打印,但仍然无法读取/查看。请尝试使用std::out打印。请参见我的编辑,您不能用16个ASCII字符表示UUID。我不确定它为什么要添加4个分隔符,但将无符号字符转换为字符需要2个字节,因此需要32个。@rjoshi这是UUID的标准ASCII表示()