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

Linux:使用uuid_generate函数(UUID)

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

uuid 学习的更多相关文章

  1. boost uuid 学习笔记

    #include <vector>#include <iostream>#include <boost/uuid/uuid.hpp>#include <boo ...

  2. mybatis学习 -每天一记 通用mapper 关于UUID回显的配置

    在使用通用mapper插入数据UUID回显 在使用通用mapper插入数据时,发现主键没有回显,我这里的主键是UUID的,解决方案是:配置一个MapperScannerConfigurer. @Bea ...

  3. Java 学习 UUID 与 时间格式化、时间操作

    UUID : UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分.其目的,是让分 ...

  4. 学习笔记-angular 使用uuid

    import { UUID } from 'angular2-uuid'; let uuid = UUID.UUID().replace(/-/g, '').toLocaleUpperCase(); ...

  5. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  6. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  7. 【转】Django Model field reference学习总结

    Django Model field reference学习总结(一) 本文档包含所有字段选项(field options)的内部细节和Django已经提供的field types. Field 选项 ...

  8. Linux LVM学习总结——扩展卷组VG

    Linux服务器由于应用变更或需求的缘故,有可能出现分区空间不足的情况,此时往往需要进行扩容(要增加分区的空间),而采用LVM的好处就是可以在不需停机的情况下可以方便地调整各个分区大小.如下所示,分区 ...

  9. [No000098]SVN学习笔记5-分支,合并,属性,补丁,锁,分支图

    行结束符和空白选项 在项目的生命周期中,有时可能会将行结束符由 CRLF 改为 LF,或者修改一段代码的缩进.不幸的是这样将会使大量的代码行被标记为已修改,尽管代码本身并没有被修改.这里列出的选项将会 ...

随机推荐

  1. python基础23 -----进程和线程

    一.进程 1.什么是进程? 1.1 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成. 1.2 程序是指进程需要完成那些功能以及如何完成. 1.3 数据集 ...

  2. 剑指offer 面试4题

    面试4题: 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 解题代码一:二 ...

  3. Javascript自动打开匹配的超链接

    可以用来点击广告.... 部分代码: function AutoClick() { var DivLink=document.getElementById("divLink"); ...

  4. ERROR 2003 (HY000): Can't connect to MySQL server on "" (113)

    服务器为centos6. 这个原因是因为防火墙的问题 在mysql服务端执行 service iptables stop chkconfig iptables off #永久关闭防火墙 看情况执行 然 ...

  5. 【HackerRank】Insertion Sort Advanced Analysis(归并排序求数列逆序数对)

    Insertion Sort is a simple sorting technique which was covered in previous challenges. Sometimes, ar ...

  6. poj 3617输出格式问题

    注意是说的80个字母一行....

  7. ubuntu+vm+ftp

    为了将windows下的文件传到linux中去,使用FZ来做服务器,在linux中进入ftp状态获取. 1.下载FileZilla服务器,在windows下安装就行了(试过汉化插件,用了就报错,所以还 ...

  8. Java远程执行Shell命令

    1. Jar包:ganymed-ssh2-build210.jar 2. 步骤: a) 连接: Connection conn = new Connection(ipAddr); conn.conne ...

  9. Nginad Server安装

    前言 Nginad是一个基于php的开源项目,它既可以作为静态配置的Ad Server,也可以作为动态的RTB Exchange使用.代码结构比较直接明了,挺适合用作学习的.本文如果有理解错误的地方, ...

  10. 创建表空间及用户的SQL

    --创建表SOFA空间: CREATE SMALLFILE TABLESPACE "SOFA" DATAFILE 'G:\oracle\product\10.2.0\ORADATA ...