c++生成GUID码

C++生成GUID码

.NET中生生成GUID(Globally Unique Identifier)比较简单

1 var uuid = Guid.NewGuid().ToString(); // 9af7f46a-ea52-4aa3-b8c3-9fd484c2af12
2 var uuidN = Guid.NewGuid().ToString(“N”); // e0a953c3ee6040eaa9fae2b667060e09
3 var uuidD = Guid.NewGuid().ToString(“D”); // 9af7f46a-ea52-4aa3-b8c3-9fd484c2af12
4 var uuidB = Guid.NewGuid().ToString(“B”); // {734fd453-a4f8-4c5d-9c98-3fe2d7079760}
5 var uuidP = Guid.NewGuid().ToString(“P”); // (ade24d16-db0f-40af-8794-1e08e2040df3)
6 var uuidX = Guid.NewGuid().ToString(“X”); // {0x3fa412e3,0x8356,0x428f,{0xaa,0x34,0xb7,0x40,0xda,0xaf,0x45,0x6f}}

但是c++生成GUID码有两种方法:

  1. 一是使用windows自带的API,CoCreateGuid函数,不需要依赖其他库,缺点是无法夸平台,只能在windows平台上使用,代码如下:
//生成guid码
Include<objbase.h>
//CoCreateGuid在objbase头文件中
string GetHash()
{
    string ret;
    GUID guid;
    HRESULT h = CoCreateGuid(&guid);//生成GUID码,HESULT是Com组件的一类返回值
    if (h == S_OK)
        ret = GuidToString(guid);//guid转化为string类型
    else
        throw runtime_error("generate guid failed!");
}
//Guid转化为的string
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);
}
  1. 使用Boost库生成GUID使用比较简单,就是要引入Boost库
#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;
  1. GUID结构
    GUID 的值表示为一系列小写的十六进制位,这些十六进制位分别以 8 个、4 个、4 个、4 个和 12 个位为一组并由连字符分隔开。 例如,返回值可以是“382c74c3-721d-4f34-80e5-57657b6cbc27”。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值