【问题标题】:Convert boost::uuid to char*将 boost::uuid 转换为 char*
【发布时间】:2011-03-28 00:09:55
【问题描述】:

我希望将 boost::uuid 转换为 const char*。转换的正确语法是什么?

【问题讨论】:

    标签: c++ boost uuid


    【解决方案1】:

    以防万一,还有boost::uuids::to_string,其工作原理如下:

    #include <boost/uuid/uuid.hpp>
    #include <boost/uuid/uuid_io.hpp>
    
    boost::uuids::uuid a = ...;
    const std::string tmp = boost::uuids::to_string(a);
    const char* value = tmp.c_str();
    

    【讨论】:

    【解决方案2】:

    您可以使用 boost::lexical_cast 更轻松地做到这一点,它在后台使用 std::stringstream。

    #include <boost/lexical_cast.hpp>
    #include <boost/uuid/uuid_io.hpp>
    
    const std::string tmp = boost::lexical_cast<std::string>(theUuid);
    const char * value = tmp.c_str();
    

    【讨论】:

    • 在阅读了 boost 文档之后,在我看来这个答案是正确的,但是根据文档还表明 boost::uuids 提供的 to_string 和 to_wstring 函数可能比 boost::lexical_cast 更快。 link
    【解决方案3】:

    您可以包含&lt;boost/uuid/uuid_io.hpp&gt;,然后使用运算符将​​uuid 转换为std::stringstream。从那里,它是根据需要到const char* 的标准转换。

    详情请见the Input and Output second of the Uuid documentation。

    std::stringstream ss;
    ss << theUuid;
    
    const std::string tmp = ss.str();
    const char * value = tmp.c_str();
    

    (有关为什么需要“tmp”字符串的详细信息,see here。)

    【讨论】:

      【解决方案4】:

      您使用 boost/uuid/uuid_io.hpp 中的流函数。

      boost::uuids::uuid u;
      
      std::stringstream ss;
      ss << u;
      ss >> u;
      

      【讨论】:

        【解决方案5】:
        boost::uuids::uuid u;
        
        const char* UUID = boost::uuids::to_string(u).c_str();
        

        可以进行简单快速的转换。

        【讨论】:

        • 这将导致 UB,如果 to_string 返回临时。
        猜你喜欢
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 2013-04-25
        • 1970-01-01
        • 2014-03-28
        • 2015-06-20
        • 2022-01-05
        相关资源
        最近更新 更多