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

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. bolg项目

    写代码要尽可能的捕获异常 模板的路径可以直接放到TEMPLATES里面的DIRS当中,TEMPLATE_DIRS可以取消掉 设置static静态文件STATICFILES_DIRS里面,这是一个元组 ...

  2. get_class_methods--返回由类的方法名组成的数组

    get_class_methods--返回由类的方法名组成的数组 array get_class_methods ( mixed $class_name ) 返回由类的方法名组成的数组. <?p ...

  3. c++ boost库学习一:时间和日期

    timer类 #include <boost\timer.hpp> #include "iostream" using namespace std; int _tmai ...

  4. 语义web基础知识学习

    最近找了一本书,<语义web技术基础>----Pascal Hitzler等编著的.因为最近在看关于自然语言处理的一些东西,就顺带翻了一下,做一点学习笔记,方便以后查看. 本书的作者 Pa ...

  5. 【bzoj1318】[Spoj744] Longest Permutation(乱搞)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1318 这道题的大意是要求一个长度为len,并包含1~len所有数,并使len最大的子区 ...

  6. easyui控件使用例子

    1.easyui之dataGrid分页加载数据例子 注意:1)分页表格通过url获得数据会提交page,rows两个参数:后台需要获取这两个参数并且由此得到 int pageSize=rows/pag ...

  7. JavaScript -- 练习,Dom 获取节点

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 阿里云服务器windows server2008r2+tomcat8.0+nginx1.12

    弄了两天的nginx,从了解开始,可能是我理解能力太差了,惭愧惭愧!但是还好看了一些大神的文章总算有点眉目了,此篇用来当作自己的笔记,大家看不懂,勿喷,但是如果有问题,直接回复,我可以给你解答一下,前 ...

  9. 利用PushbackReader读取文件中某个字符串之前的内容

    package File; import java.io.FileReader; import java.io.IOException; import java.io.PushbackReader; ...

  10. 将Sql2008的数据库转到2005

    今天碰到一个特别伤心的事情. 事情的起因是这样的,现在我负责评教系统的维护工作.由于中途服务器转迁,迁移之前数据库版本是2005,而现在的服务器版本是2008R2的.在这个过程并没有发生什么问题. 问 ...