4.10.5 与字符串的转换
uuid可以使用字符串生成器从字符串生成,但却没有提供一个反向的操作,不能直接获得一个uuid的字符串表示。因为uuid支持流输入输出,故可以使用std::stringstream转换为字符串,例如:
- uuid u = string_generator() //字符串生成器
- ("01234567-89ab-cdef-0123-456789abcdef");
- stringstream ss; //字符串流
- ss << u; //uuid输出到字符串流
- string str; //字符串对象
- ss >> str; //字符串流输出到字符串对象
- cout << str << endl;
这种方法虽然可行,但要写很多代码,比较麻烦,我们可以用另一个Boost库组件lexical_ cast(将在5.1节,第163页介绍),它可以非常方便地实现字符串与uuid的双向转换(得益于uuid的流输入输出功能):- #include <boost/lexical_cast.hpp> // lexical_cast头文件
- using namespace boost;
- using namespace boost::uuids;
- int main()
- {
- uuid u = lexical_cast<uuid> //字符串转换到uuid
- ("01234567-89ab-cdef-0123-456789abcdef");
- cout << u << endl;
- string str = lexical_cast<string>(u); //uuid转换到字符串
- cout << str << endl;
- };
lexical_cast的字符串转换uuid的用法很类似字符串生成器string_generator,但功能要弱很多,因为lexical_cast的转换功能是基于uuid的流输入能力,因此只能接受连字符格式的字符串,而且不能有花括号。