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,或者修改一段代码的缩进.不幸的是这样将会使大量的代码行被标记为已修改,尽管代码本身并没有被修改.这里列出的选项将会 ...
随机推荐
- javascript高级语法
一.JavaScript对象 1.js对象简介 1.1 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,在JavaScrip ...
- print函数end参数的作用
print函数默认会在末尾添加一个换行符(‘\n’) 加入end=''参数后,不会在末尾添加换行符,而是在末尾添加一个空字符串,end等于什么就会在末尾添加什么 这个只在python3中有效
- javascript;Jquery;获取JSON对象,无刷新评论实例。
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> < ...
- 每天一个Linux命令(52)telnet命令
执行telnet指令开启终端机阶段作业,并登入远端主机. (1)用法: 用法: telnet [参数] [主机] (2)功能: 功能: telnet命令通常 ...
- hadoop05---进程线程
J2ee是一种规范,tomcat.jboss.weblogic就是实现.JMS是一种规范,ActiveMQ是实现. .1.1. 进程介绍.线程介绍 进程:它是内存中的一段独立的内存空间. 线程:是在进 ...
- 【Topcoder】SRM158 DIV2总结
250分题:给定一个4位字符串initial和rotate这个字符串的方式,然后再给另一个字符串current,问current能否由initial通过rotate得到,需要几次rotate? 简单的 ...
- UVA11297 Census
题目 UVA11297 Census 做法 二维线段树,单点修改,矩阵查询,树套树(\(x,y\)),维护最大值最小值废话 有一点要注意的是:\(x\)树传到\(y\)树里面修改的时候,如果\(x\) ...
- require.js和sea.js的区别
下面为大家讲解一下require.js和sea.js的区别.纯属个人意见,不喜勿喷. 首先原理上的区别 sea.js遵循CMD规范.书写方式类似node.js的书写模板代码.依赖的自动加载,配置的简洁 ...
- Raspberry 2B && Ubuntu mate 16.04 && *** 完美透明代理
Raspberry 2B && Ubuntu mate 16.04 && *** 完美透明代理 关键词:Raspberry 2B, Ubuntu mate 16.04 ...
- Ubuntu: 无法使用su命令
Ubuntu 无法使用su命令解决方案 在Ubuntu上编译Qt环境时发现无法使用su命令切换到root用户,通过网上查找发现解决方案如下: xt@xt-ubuntu:~$ su密码: su:认证失败 ...