C++生成GUID的两种方法
C++生成GUID的两种方法
- C++生成GUID的两种方法
- 使用CoCreateGuid函数
- 使用Boost库
C++生成GUID的两种方法
GUID是软件开发中常用的组件,用于生成唯一的对象,在C#、Java以及Python等语言中,因为它们的标准库比较丰富,因此GUID的生成比较简单,往往一两句代码就能搞定。而C++语言本身以及标准库都没有提供生成GUID的API,因此,无法直接使用C++生成GUID。本文介绍两种利用C++间接创建GUID的方法:1)调用Win32API-CoCreateGuid函数;2)使用Boost库。
使用CoCreateGuid函数
CoCreateGuid是Windows系统本身提供的API函数,位于objbase.h
头文件中,因此,我们必须首先包括该头文件:
include <objbase.h>
调用CoCreateGuid的代码如下所示:
GUID guid;HRESULT h = CoCreateGuid(&guid);if (h == S_OK)ans = GuidToString(guid);elsethrow runtime_error("generate guid failed!");
上述代码中,如果创建GUID成功,则h的值为S_OK,失败则为其他标志位。HRESULT是COM组件的一类返回值,请参考HRESULT。GuidToString函数用于将生成的Guid转换为std::string,该函数来自:https://www.oschina.net/question/153826_56654。
std::string GuidToString(const GUID &guid)
{char buf[64] = { 0 };sprintf_s(buf, sizeof(buf),"{%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]);return std::string(buf);
}
这种基于Win32API生成GUID的方法的优点在于不需要依赖其他库,缺点在于无法跨平台,只能在Windows平台的使用。
使用Boost库
使用Boost库来生成GUID相对就比较简单了,代码如下:
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>boost::uuids::uuid uid = boost::uuids::random_generator()();const string uid_str = boost::uuids::to_string(uid);cout << uid_str << endl;
首先加载包,然后使用boost::uuids命名空间下的相关类型和函数就可以创建std::string类型的GUID了。基于BOOST来生成GUID的方法比较简单,但是缺点是需要额外引入Boost库。
C++生成GUID的两种方法相关推荐
- 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你
在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 目录 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 1.文章中的标题较多,每个单独调整格式太费劲,这里我们用一 ...
- 用word2007自动生成目录的两种方法
用word2007自动生成目录的两种方法 看到很多人还在手工编写word的目录,感觉很浪费时间,下面跟大家分享一下,在word2007及word ...
- php 生成excel表格,PHP 生成Excel表格两种方法
1.使用PHP header()函数 (向浏览器输出Excel,即通过浏览器方式,下载生成的excel) 实例: /** * PHP 使用heade()函数生成excel表格 ExcelName为 ...
- python使用源文件_使用Python生成源文件的两种方法
利用Python的字符串处理模块,开发人员可以编写脚本用来生成那些格式相同的C.C++.JAVA源程序.头文件和测试文件,从而避免大量的重复工作.本文概述两种利用Python string类生成jav ...
- hive sql自动生成id的两种方法随机id和自增id
文章目录 1.生成自增id:row number() over(order by) 2.随机不重复id: regexp_replace(reflect('java.util.UUID','random ...
- 生成word的两种方法 freemaker和POI
一:用freemaker生成word 1.用word 编辑好模板 A.普通字符串替换为${String} 如图: B.表格循环用标签 <#list list as s> 上报人:${s. ...
- 自动生成testbench的两种方法
方法一: Quartus,Processing->Start->Start Teat Bench Template Write, 选择了之后会在工程的simulation/modelsim ...
- 生成GUID的两种方式
1.调用Win32API-CoCreateGuid函数: #include <objbase.h> std::string GenerateGUIDStr(); std::string G ...
- php 自动生成查询密码,php自动生成新密码的两种方法
php自动生成新密码的两种方法,方法一采用的是随机种子,方法是乱序数组,异曲同工吧. 有需要的朋友可以参考下. 方法1: 代码示例: /* * php自动生成新密码自定义函数 适用环境: PHP5.2 ...
最新文章
- POJ1328贪心放雷达
- VM虚拟机Centos系统时间同步
- Java编程的逻辑 (59) - 文件和目录操作
- (转)怎么实时查看mysql当前连接数
- Python 3.x 格式化输出字符串 % format 笔记
- web_cache_server -- Varnish
- java反射--注解的定义与运用以及权限拦截
- Android官方开发文档Training系列课程中文版:网络操作之网络连接
- 2018年云栖社区值得订阅的11个精选技术期刊!
- Mysql 执行顺序
- matlab 打开xls文件,matlab中读取excel的xls文件
- 金蝶 系统服务器繁忙,金蝶登录时提示云服务器繁忙
- php添加页脚,WordPress网站页脚footer.php修改图文教程
- 一文读懂|什么是dToF激光雷达技术?
- 3.1 项目经理的角色习题集
- Keil环境添加STC系列单片机
- Anders Hejlsberg 技术理想架构开发传奇
- 跨国引入强势技术 安全行业又添生力军
- 探讨下一步的网游(二)未来不是“游戏+SNS”而是“游戏SNS”
- 人的横向发展与纵向发展