zoukankan      html  css  js  c++  java
  • uuid 学习

    #include <vector>
    #include <iostream>
    #include <boost/uuid/uuid.hpp>
    #include <boost/uuid/uuid_generators.hpp>
    #include <boost/uuid/uuid_io.hpp>
    using namespace boost::uuids;
    using namespace std;
    int main()
    {
    	//-------------------------
    	// 一些std函数的应用
    	//-------------------------
    	vector<unsigned int> v(16, 7);
    	uuid u;
    	std::copy(v.begin(), v.end(), u.begin());	// 将一个序列复制到另一个序列中(从begin到end)
    	std::fill_n(u.data + 2, 6, 8);				// 将数组第二个序列号后的6个值赋为8
    	cout <<"/n u first print:" <<u<<endl;
    	std::memset(u.data, 0, u.size());			// 将数组中的所有元素都置零
    	cout <<"UUID is empty:"<<u.is_nil()<<endl;  // 是否全零
    	cout <<"u second print:" <<u<<endl;			// 再次输输出
    	//--------------------------
    	// uuid的比较(字典序1~9,a~z排序)
    	//--------------------------
    	uuid u1, u2;
    	std::fill_n(u1.begin(), u1.size(), 0xab);	// 从第位开始始,后面size()位都赋成0xab
    	std::fill_n(u2.begin(), u2.size(), 0x10);
    	cout <<"uuid1:"<<u1<<endl<<"uuid2:"<<u2<<endl;
    	(u1>=u2)?cout<<"uuid1 is Max equal to uuid2/n":cout<<"uuid2 is Max to uuid1/n";
    	//--------------------------
    	// UUID 的几种生成器,它们都是函数对象
    	//--------------------------
    	// 第一种: 
    	// Nil生成器(生成一个全零/无效的UUID/is_nil)
    	uuid nilUUID1 = nil_generator()();			// 第一个括号是构造函数,第二个是调用重载操作符(operator())
    	uuid nilUUID2 = nil_uuid();					// 内联函数
    	cout<< "nilUUID1: "<<nilUUID1<<endl;
    	cout<< "nilUUID2: "<<nilUUID2<<endl;
    	// 第二种:
    	// 字符串生成器(可是c数组,string,wstring,或迭代器指定的字符串区间)
    	string_generator sgen;
    	uuid strUUID1 = sgen("0123456789abcdef0123456789uvwxyz");		// 没有隔线分开,uvwxyz会变成ffffff
    	uuid strUUID2 = sgen("01234567-89ab-cdef-0123-456789abcdef"); // 有分隔,分隔不能乱隔
    	uuid strUUID3 = sgen(L"{01234567-89ab-cdef-0123-456789abcdef}"); // 使用"{}"括起来除{}外不能有16进制外的任何字符
    	cout << "strUUID1 value: "<<strUUID1<<endl;
    	cout << "strUUID2 value: "<<strUUID2<<endl;
    	cout << "strUUID3 value: "<<strUUID3<<endl;
    	// 第三种:
    	// 名字生成器(参数可以是16进制字符外的字符)
    	uuid baseUUID = sgen(L"{01234567-89ab-cdef-0123-456789abcdef}");
    	name_generator ngen(baseUUID);			// 构造名字生成器,需要一个基准uuid,
    											// 只要基准uuid不变,相同字符串总产生相同的uuid
    	uuid nameUUID1 = ngen("Ajiaxi");		// 为Ajiaxi生成一个UUID, version是shal算法
    	uuid nameUUID2 = ngen("Link");			// 为Link生成一个UUID
    	cout << "nameUUID1 value: "<<nameUUID1<<endl;
    	cout << "nameUUID2 value: "<<nameUUID2<<endl;
    	// 第四种:
    	// 随机生成器(使用boost::random生成随机种子)
    	random_generator rgen;
    	uuid ranUUID = rgen();					// 生成一个随机uuid
    	cout << "ranUUID value: "<<ranUUID<<endl;
    	getchar();
    	return 0;
    }


    Windows:使用CoCreateGuid函数(GUID)

    1. #include <objbase.h>  
    2. #include <stdio.h>  
    3.   
    4. #define GUID_LEN 64  
    5.   
    6. int main(int argc, char* argv[])  
    7. {  
    8.     char buffer[GUID_LEN] = { 0 };  
    9.     GUID guid;  
    10.   
    11.     if ( CoCreateGuid(&guid) )  
    12.     {  
    13.         fprintf(stderr, "create guid error ");  
    14.         return -1;  
    15.     }  
    16.     _snprintf(buffer, sizeof(buffer),   
    17.         "%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X",   
    18.         guid.Data1, guid.Data2, guid.Data3,   
    19.         guid.Data4[0], guid.Data4[1], guid.Data4[2],   
    20.         guid.Data4[3], guid.Data4[4], guid.Data4[5],   
    21.         guid.Data4[6], guid.Data4[7]);  
    22.     printf("guid: %s ", buffer);  
    23.   
    24.     return 0;  
    25. }  

    Linux:使用uuid_generate函数(UUID)
    1. //编译命令:gcc atemp.c -o atemp -luuid  
    2. #include <stdio.h>  
    3. #include <uuid/uuid.h>  
    4.   
    5. int main()   
    6. {   
    7.     uuid_t uu;  
    8.     int i;  
    9.     uuid_generate( uu );   
    10.   
    11.     for(i=0;i<16;i++)   
    12.     {   
    13.         printf("%02X-",uu[i]);   
    14.     }   
    15.     printf(" ");   
    16.   
    17.     return 0;   
    18. }   

  • 相关阅读:
    MyEclipse10破解后续~~~~破解不成功
    Java分为三个体系JavaSE,JavaEE,JavaME 它们的区别以及java的各个版本?
    评分模型的检验方法和标准&信用评分及实现
    单点登录原理与简单实现
    MongoDB 3.2 从安装到使用。
    MongoDB笔记1:Windows下安装MongoDB
    MongoDB笔记2: MongoDB开启用户名密码验证
    MongoDB 官方C#驱动 封装 DbHelper
    五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
    常用验证 正则表达式
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9410069.html
Copyright © 2011-2022 走看看