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)
- #include <objbase.h>
- #include <stdio.h>
- #define GUID_LEN 64
- int main(int argc, char* argv[])
- {
- char buffer[GUID_LEN] = { 0 };
- GUID guid;
- if ( CoCreateGuid(&guid) )
- {
- fprintf(stderr, "create guid error\n");
- return -1;
- }
- _snprintf(buffer, sizeof(buffer),
- "%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X",
- guid.Data1, guid.Data2, guid.Data3,
- guid.Data4[0], guid.Data4[1], guid.Data4[2],
- guid.Data4[3], guid.Data4[4], guid.Data4[5],
- guid.Data4[6], guid.Data4[7]);
- printf("guid: %s\n", buffer);
- return 0;
- }
Linux:使用uuid_generate函数(UUID)
- //编译命令:gcc atemp.c -o atemp -luuid
- #include <stdio.h>
- #include <uuid/uuid.h>
- int main()
- {
- uuid_t uu;
- int i;
- uuid_generate( uu );
- for(i=0;i<16;i++)
- {
- printf("%02X-",uu[i]);
- }
- printf("\n");
- return 0;
- }
uuid 学习的更多相关文章
- boost uuid 学习笔记
#include <vector>#include <iostream>#include <boost/uuid/uuid.hpp>#include <boo ...
- mybatis学习 -每天一记 通用mapper 关于UUID回显的配置
在使用通用mapper插入数据UUID回显 在使用通用mapper插入数据时,发现主键没有回显,我这里的主键是UUID的,解决方案是:配置一个MapperScannerConfigurer. @Bea ...
- Java 学习 UUID 与 时间格式化、时间操作
UUID : UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分.其目的,是让分 ...
- 学习笔记-angular 使用uuid
import { UUID } from 'angular2-uuid'; let uuid = UUID.UUID().replace(/-/g, '').toLocaleUpperCase(); ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 【转】Django Model field reference学习总结
Django Model field reference学习总结(一) 本文档包含所有字段选项(field options)的内部细节和Django已经提供的field types. Field 选项 ...
- Linux LVM学习总结——扩展卷组VG
Linux服务器由于应用变更或需求的缘故,有可能出现分区空间不足的情况,此时往往需要进行扩容(要增加分区的空间),而采用LVM的好处就是可以在不需停机的情况下可以方便地调整各个分区大小.如下所示,分区 ...
- [No000098]SVN学习笔记5-分支,合并,属性,补丁,锁,分支图
行结束符和空白选项 在项目的生命周期中,有时可能会将行结束符由 CRLF 改为 LF,或者修改一段代码的缩进.不幸的是这样将会使大量的代码行被标记为已修改,尽管代码本身并没有被修改.这里列出的选项将会 ...
随机推荐
- 流量分析系统---redis
1\启动redis 方法一: 修改了某些配置,具体步骤惨开下面的内容 [root@mini1 ~]# service redis stop/start 方法二: [root@mini1 bin]#cd ...
- Harbor私有仓库搭建
1.安装docker yum install -y dockersystemctl start dockersystemctl enable docker 2.安装docker-compose 1.下 ...
- C# partial 关键字
C# partial关键字详解 partial关键字允许把类.结构或接口放在多个文件中.一般情况下,一个类存储在单个文件中.但有时,多个开发人员需要访问同一个类,或者某种类型的代码生成器生成了一个类的 ...
- python tkinter组件学习
http://blog.csdn.net/pfm685757/article/details/50162567
- Linux文件系统管理 fdisk分区命令
概述 我们在安装操作系统的过程中已经对系统硬盘进行了分区,但是如果我新添加了一块硬盘,想要正常使用时,在Linux中有专门的分区命令 fdisk 和 parted.其中 fdisk 命令较为常用,但不 ...
- Django框架之cookie和session及开发登录功能
1.cookie是什么? Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.这就意味着服务器无法从 ...
- python补充知识点
1. 在python2中用xrange,在python3中直接使用range就好了 2. 常数 None在逻辑判断的时候指代False,其他方式不代表True或者False 3. for循环只作用域容 ...
- Java远程执行Shell命令
1. Jar包:ganymed-ssh2-build210.jar 2. 步骤: a) 连接: Connection conn = new Connection(ipAddr); conn.conne ...
- shell删除最后一列、删除第一行、比较文件
删除文件第一行: sed -i '1d' filename 删除文件最后一列: awk '{print $NF}' filename 比较文件的方法: 1)comm -3 --nocheck-orde ...
- 【codevs1002】搭桥(prim)
题目描述: 这是道题题意有点迷(或者是我语文不好),但其实实际上求的就是图中连通块的个数,然后在连通块与连通块之间连边建图跑最小生成树.但是……这个图可能是不连通的……求桥的数量和总长 于是我立刻想到 ...