关闭

Linux & Windows上生成UUID/GUID

9916人阅读 评论(0) 收藏 举报
分类:

Linux & Windows上生成UUID/GUID


请见如下相关文章:

boost uuid

uuid in linux vs uuid in window[Parser]

各种OS中生成UUID的方法


GUID是微软对Distributed coumputing environment (DCE) universally unique identifier 的实现,而在Linux下则称作UUID。


通用的GUID的结构如下
typedef struct _GUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
举一个例子:
假设一个GUID的格式是这样的 6B29FC40-CA47-1067-B31D-00DD010662DA
其中Data1 是32位,可以看做8个四位十六进制数,对应于上面的6B29FC40
其中Data2 是16位,可以看做4个四位十六进制数,对应于上面的CA47
其中Data3 是16位,可以看做4个四位十六进制数,对应于上面的1067
其中Data4 比较特殊,是8个字节也就可以看做16个四位十六进制数
      取其Data4[0],Data4[1]来组成4个四位十六进制数,对应于上面的B31D
      取其Data4[2],Data4[3]来组成4个四位十六进制数,对应于上面的00DD
      取其Data4[4],Data4[5]来组成4个四位十六进制数,对应于上面的0106
      取其Data4[6],Data4[7]来组成4个四位十六进制数,对应于上面的62DA
*注意:四位十六进制数对应一个GUID字符。

具体代码:

#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;

#ifdef WIN32
#include <objbase.h>
#else
#include <uuid/uuid.h>
#endif

GUID CreateGuid()
{
    GUID guid;
#ifdef WIN32
    CoCreateGuid(&guid);
#else
    uuid_generate(reinterpret_cast<unsigned char *>(&guid));
#endif
    return guid;
}

std::string GuidToString(const GUID &guid)
{
    char buf[64] = {0};
#ifdef __GNUC__
    snprintf(
#else // MSVC
    _snprintf_s(
#endif
                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);
}

请注意:

windows下需要引用 ole32.lib

在linux下编译时需要链接uuid库(-luuid)

0
0
查看评论

linux文件的访问权限全解析,包括SUID,GUID

linux文件的访问权限和文件模式SUID含义:文件的该位被设 置为1,在该文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权,如果所有者是root的话,那么执行人就有超级用户 的特权了,这是该位将变成一个安全漏洞,因此不要轻易设置该位。SGID含义:运行...
  • zengqiang1
  • zengqiang1
  • 2016-11-03 13:54
  • 1608

在Linux下生成GUID的程序,及编译错误 “uuid/uuid.h: No such file or directory” 的解决办法。

在Linux下编写创建GUID的程序,在编译时出现错误 “uuid/uuid.h: No such file or directory”的解决办法。 安装 libuuid-devel 软件包即可。如下: [root@localhost]# yum install libuuid-devel Lo...
  • iw1210
  • iw1210
  • 2013-12-13 13:39
  • 17603

获取硬件UUID方法(windows、linux)

1、命令获取uuid 1.1、windows系统中获取设备的UUID的方法: 在命令提示符下输入wmic 再输入csproduct 或 csproduct list full wmic:rootcli>csproduct list full Description=计算机系统产品 Iden...
  • fksec
  • fksec
  • 2015-04-30 16:09
  • 8512

UUID/GUID的生成封装(Win32/Linux)

#include #include #ifdef WIN32 #include #else #include typedef struct _GUID {     unsigned long Data1;  ...
  • dj0379
  • dj0379
  • 2015-02-06 02:14
  • 1342

linux suid guid 详解

如果你对SUID、SGID仍有迷惑可以好好参考一下! Copyright by kevintz. 由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。关于SUID、SGID的问题也经常有人提问,但回答的人一般答得不够详细,加上...
  • happyzwh
  • happyzwh
  • 2012-02-03 17:20
  • 258

UUID、GUID、CLSID

一、UUID   UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distrib...
  • jolin678
  • jolin678
  • 2016-07-18 23:55
  • 859

uuid

概述: UUID是128位的全局唯一标识符,通常由32字节的字符串表示。 它可以保证时间和空间的唯一性,也称为GUID,全称为: UUID —— Universally Unique IDentifier Python 中叫 UUID ...
  • windows_2015
  • windows_2015
  • 2016-07-11 13:43
  • 404

游戏服务器里GUID的生成算法

先提供linux下的模拟: #include #include /**   本程序可以生成64位全服务器全局唯一ID   支持每秒4096个注册   由 时间戳+区号+平台号+本地递增序号 组成   时间戳 32bit   区号 12b...
  • monster877
  • monster877
  • 2014-04-07 02:48
  • 2298

如何生成一个新的GUID 全球统一唯一编号

导读:         今天再搞exchagne的时候,发现一个 guid ,上网查了下,原来如此  GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成GUID的AP...
  • zhangyunbo1116
  • zhangyunbo1116
  • 2007-11-16 15:45
  • 4575

guid的获取(系统下唯一标识符)

我们经常会遇到需要一些特殊的值来指定一些特殊的变量,而且这个值要绝对的唯一。在windows下被称作GUID,其实GUID是微软对Distributed coumputing environment (DCE) universally unique identifier 的实现,而在Linux下则称...
  • xiaoyafang123
  • xiaoyafang123
  • 2016-08-09 10:58
  • 4216
    个人资料
    • 访问:616665次
    • 积分:8656
    • 等级:
    • 排名:第2685名
    • 原创:239篇
    • 转载:96篇
    • 译文:0篇
    • 评论:44条
    最新评论