boost库uuid工具

来源:互联网 发布:加工中心打孔编程g81 编辑:程序博客网 时间:2024/06/15 23:10

uuid P161

  1. 可以自定义一个头文件来使用uuid组件

    //uuids.hpp #include <boost/uuid/uuid.hpp>#include <boost/uuid/uuid_generators.hpp>#include <boost/uuid/uuid_io.hpp>using namespace boost::uuids;
    #include "uuids.hpp"using namespace boost::uuids;int main(){    uuid u;          //声明一个uuid对象    assert(uuid::static_size() == 16);     //uuid的长度总是16    assert(u.size() == 16);    vector<unsigned char> v(16,7);         //一个vector对象    std::copy(v.begin(),v.end(),u.begin());  //使用标准拷贝算法    assert(u.data[0] == u.data[1] && u.data[15] == 7);    //流输出:07070707-0707-0707-070707070707    cout<<u<<endl;    std::fill_n(u.data+10, 6, 8);    //流输出:07070707-0707-0707-080808080808    cout<<u<<endl;}
  2. 生成器 P165

    • Nil生成器 -> 生成无效全零的UUID值
        uuid u = nil_generator()();     //注意有两个括号    assert(u.is_nil());    u = nil_uuid();    assert(u.is_nil());
    • 字符串生成器 -> string_generator //对字符串格式有严格要求
        string_generator sgen;    uuid u1 = sgen("0123456789abcdef0123456789abcdef");    cout<<u1<<endl;    uuid u2 = sgen("01234567-89ab-cdef-0123-456789abcdef");    cout<<u1<<endl;    uuid u3 = sgen(L"{01234567-89ab-cdef-0123-456789abcdef}");    cout<<u3<<endl;
    • 名字生成器 -> name_generator //基于名字的SHA1摘要算法,需要指定基准UUID
        //首先生成一个组织的UUID    uuid www_xxx_com = string_generator()("{0123456789abcdef0123456789abcdef}");    name_generator ngen(www_xxx_com);    uuid u1 = ngen("mario");      //为名字mario生成UUID    assert(!u1.is_nil()&&         //version是sha1算法        u1.version() == uuid::version_name_based_sha1);    uuid u2 = ngen("link");       //为名字link生成UUID    cout<<u2<<endl;
    • 随机生成器 -> basic_random_generator
        random_generator rgen;        //随机生成器    uuid u = rgen();              //生成一个随机的UUID    assert(u.version() == uuid::version_random_number_based);    cout<<u<<endl;
  3. 增强的uuid类 P167

    using namespace boost::uuids;class uuid_t: public uuid{private:    static random_generator rgen;                //随机数生成器    static string_generator sgen;                //字符串生成器public:    uuid_t(): uuid(rgen()){}                     //缺省构造函数,生成随机UUID    uuid_t(int): uuid(nil_uuid()) {}             //0值的UUID构造函数    uuid_t(const char* str): uuid(sgen(str)) {}  //字符串构造函数    uuid_t(const uuid& u, const char* str):      //名字生成器构造函数        uuid(name_generator(u)(str)) {}    explicit uuid_t(const uuid& u): uuid(u){}    //拷贝构造函数    operator uuid()                              //转换到uuid类型    { return static_cast<uuid&>(*this); }    operator uuid() const                        //常函数,转换到const uuid类型    { return static_cast<const uuid&>(*this); }};random_generator uuid_t::rgen;                 //静态成员变量的定义string_generator uuid_t::sgen;//使用uuid_t u0 = 0;                                 //0值的UUIDassert(u0.is_nil());uuid_t u1,u2;                                  //创建两个随机的UUID值cout<<u1<<endl;cout<<u2<<endl;uuid_t u3("{01234567-89ab-cdef-0123-456789abcdef}");  //字符串构造cout << u3 <<endl;cout<<uuid_t(u3,"test name gen")<<endl;        //通过名字构造
  4. 与字符串的转换

    #include <boost/lexical_cast.hpp>using namespace boost;using namespace boost::uuids;int main(){    uuid u = lexical_cast<uuid>("01234567-89ab-cdef-0123-456789abcdef");    cout<<u<<endl;    string str = lexical_cast<string>(u);    cout<<str<<endl;};
0 0
原创粉丝点击