美文网首页
c/c++ 生成uuid

c/c++ 生成uuid

作者: yandaren | 来源:发表于2019-01-02 18:22 被阅读0次

在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
 *
 * @author  :   yandaren1220@126.com
 * @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

相关文章

  • fatal error: uuid/uuid.h: No suc

    我们在linux系统使用c/c++生成uuid的时候,一般会使用 uuid/uuid.h 里面的uuid_gene...

  • c/c++ 生成uuid

    在c/c++中生成uuid,标准库里面并没有提高相应的方法;如果使用boost的话,可以使用boost::uuid...

  • Ubuntu挂载硬盘及修改UUID

    设置自动挂载硬盘 修改分区UUID linux中的分区都使用uuid表示。uuid是通过算法生成的一个格式如”2c...

  • JSON数据转C++结构体

    JSON数据自动生成C++结构体 JSON数据自动生成C++结构体背景nlohmann/json基础Python自...

  • js常用函数

    1.uuid UUIDGenerator 生成 UUID。 使用cryptoAPI 生成 UUID, 符合RFC4...

  • Unreal 如何编译C++

    1. C++编译 (1)C++编译后生成的文件 以下对生成文件的常见文件进行说明 (2.)C++编译过程 2. U...

  • C# 静态调用C++ 生成的dll,即非托管dll

    C++文集板块有一节《C++ 如何生成一个DLL动态链接库》已经讲述了,C++如何生成一个动态链接库CPPDLLD...

  • js 生产uuid

    /* 生成uuid */ function uuid() { var s = []; ...

  • C++编写dll与调用

    重要参考 c++ dll编写与加载;C++编程笔记:dll的生成与使用;8.DLL导出C++类; 在 Visual...

  • protobuf

    protobuf版本 Person.proto 将proto结构描述模板生成C++代码 C++的protobuf序...

网友评论

      本文标题:c/c++ 生成uuid

      本文链接:https://www.haomeiwen.com/subject/hhhtrqtx.html