c/c++ 生成uuid

简介

在c/c++中生成uuid,标准库里面并没有提高相应的方法;如果使用boost的话,可以使用boost::uuids::uuid 生成uuid;如果不使用boost的话,那就需要根据操作系统的不同,编写相应的实现。

1. boost生成uuid

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid_generators.hpp>
 
int main()
{
    boost::uuids::uuid a_uuid = boost::uuids::random_generator()(); 
    string uuid_string = boost::uuids::to_string(a_uuid)
    return 0;
}

2. 根据操作系统的不同,编写不同的实现

/**
 * 
 * uuid.hpp
 * uuid generator
 *
 * @date    :   2017-06-25
 */

#ifndef __ydk_utility_uuid_hpp__
#define __ydk_utility_uuid_hpp__

#include <stdio.h>
#include <stdint.h>
#include <string>

#if defined(_WIN32)
#include <objbase.h>
#elif defined(__linux__)
#include <uuid/uuid.h>
#else
#error "uuid unsupport platform"
#endif

#define GUID_LEN 64

namespace utility
{
namespace uuid
{
#if defined(_WIN32)
    static std::string generate()
    {
        char buf[GUID_LEN] = { 0 };
        GUID guid;

        if (CoCreateGuid(&guid))
        {
            return std::move(std::string(""));
        }

        sprintf(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::move(std::string(buf));
    }
#elif defined(__linux__)
    static std::string generate()
    {
        char buf[GUID_LEN] = { 0 };

        uuid_t uu;   
        uuid_generate( uu );   

        int32_t index = 0;
        for (int32_t i = 0; i < 16; i++)
        {
            int32_t len = i < 15 ? 
                sprintf(buf + index, "%02X-", uu[i]) : 
                sprintf(buf + index, "%02X", uu[i]);
            if(len < 0 )
                return std::move(std::string(""));
            index += len;
        }

        return std::move(std::string(buf));
    }
#endif
}
}

#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的小熊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值