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的两种方法相关推荐

  1. 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你

    在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 目录 在word文档中如何自动生成目录,两种方法制作目录,总有一种适合你 1.文章中的标题较多,每个单独调整格式太费劲,这里我们用一 ...

  2. 用word2007自动生成目录的两种方法

                                用word2007自动生成目录的两种方法 看到很多人还在手工编写word的目录,感觉很浪费时间,下面跟大家分享一下,在word2007及word ...

  3. php 生成excel表格,PHP 生成Excel表格两种方法

    1.使用PHP header()函数  (向浏览器输出Excel,即通过浏览器方式,下载生成的excel) 实例: /** * PHP 使用heade()函数生成excel表格  ExcelName为 ...

  4. python使用源文件_使用Python生成源文件的两种方法

    利用Python的字符串处理模块,开发人员可以编写脚本用来生成那些格式相同的C.C++.JAVA源程序.头文件和测试文件,从而避免大量的重复工作.本文概述两种利用Python string类生成jav ...

  5. hive sql自动生成id的两种方法随机id和自增id

    文章目录 1.生成自增id:row number() over(order by) 2.随机不重复id: regexp_replace(reflect('java.util.UUID','random ...

  6. 生成word的两种方法 freemaker和POI

    一:用freemaker生成word 1.用word 编辑好模板 A.普通字符串替换为${String} 如图: B.表格循环用标签 <#list  list as s> 上报人:${s. ...

  7. 自动生成testbench的两种方法

    方法一: Quartus,Processing->Start->Start Teat Bench Template Write, 选择了之后会在工程的simulation/modelsim ...

  8. 生成GUID的两种方式

    1.调用Win32API-CoCreateGuid函数: #include <objbase.h> std::string GenerateGUIDStr(); std::string G ...

  9. php 自动生成查询密码,php自动生成新密码的两种方法

    php自动生成新密码的两种方法,方法一采用的是随机种子,方法是乱序数组,异曲同工吧. 有需要的朋友可以参考下. 方法1: 代码示例: /* * php自动生成新密码自定义函数 适用环境: PHP5.2 ...

最新文章

  1. POJ1328贪心放雷达
  2. VM虚拟机Centos系统时间同步
  3. Java编程的逻辑 (59) - 文件和目录操作
  4. (转)怎么实时查看mysql当前连接数
  5. Python 3.x 格式化输出字符串 % format 笔记
  6. web_cache_server -- Varnish
  7. java反射--注解的定义与运用以及权限拦截
  8. Android官方开发文档Training系列课程中文版:网络操作之网络连接
  9. 2018年云栖社区值得订阅的11个精选技术期刊!
  10. Mysql 执行顺序
  11. matlab 打开xls文件,matlab中读取excel的xls文件
  12. 金蝶 系统服务器繁忙,金蝶登录时提示云服务器繁忙
  13. php添加页脚,WordPress网站页脚footer.php修改图文教程
  14. 一文读懂|什么是dToF激光雷达技术?
  15. 3.1 项目经理的角色习题集
  16. Keil环境添加STC系列单片机
  17. Anders Hejlsberg 技术理想架构开发传奇
  18. 跨国引入强势技术 安全行业又添生力军
  19. 探讨下一步的网游(二)未来不是“游戏+SNS”而是“游戏SNS”
  20. 人的横向发展与纵向发展

热门文章

  1. 基础时间函数总结(c语言)
  2. python中随机种子_Pytorch随机种子
  3. 智能穿戴设备洗牌正当时,彩屏荣耀手环4机会来了?
  4. fastjson如何指定字段不序列化
  5. Photoshop 笔记
  6. 四、科大软件工程(孟宁)(4:定义接口)
  7. 25Hz相敏轨道电路调整方法
  8. c语言题库anki,Anki
  9. 云呼服务器网站,云呼服务器地址
  10. python实现图片旋转