boost库uuid工具
来源:互联网 发布:加工中心打孔编程g81 编辑:程序博客网 时间:2024/06/15 23:10
uuid P161
可以自定义一个头文件来使用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;}
生成器 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;
增强的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; //通过名字构造
与字符串的转换
#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
- boost库uuid工具
- boost库之uuid
- boost uuid
- boost uuid
- boost uuid
- boost uuid
- boost uuid 学习笔记
- boost uuid 学习笔记
- Boost 1.42新库速递——UUID
- Boost 库的构建工具
- JAVA工具类 UUID
- UUID工具类
- UUID生成工具
- UUID工具类
- UUID工具类
- Ubuntu下 安装boost和uuid
- boost中的实用工具assign和uuid
- 使用bcp工具分离boost库
- is_dir(),opendir(),readdir()简单遍历目录下的文件
- AJAX学习
- Linux 之端口监听
- leancloud常用语法
- SLAM的前世今生 终于有人说清楚了 | 硬创公开课
- boost库uuid工具
- UIButton的图片在右文字在左
- Echarts图表使用案例
- java中判断字母的大小写,并互相转化的方法
- 单元测试、接口测试、web自动化测试的区别
- mui底部不动的按钮
- Nginx的转发匹配规则
- CURL函数
- Discuz!X数据库函数操作命令大全