1. 程式人生 > >Linux & Windows上生成UUID/GUID

Linux & Windows上生成UUID/GUID

Linux & Windows上生成UUID/GUID

請見如下相關文章:

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)

相關推薦

Linux & Windows生成UUID/GUID

Linux & Windows上生成UUID/GUID 請見如下相關文章: GUID是微軟對Distributed coumputing environment (DCE) univ

thinkphp 3.2 伺服器 session 設定時間週期失效問題 伺服器是linux windows 暫時沒有發現此類問題

  今天有時間,寫一下之前 用 TP3.2 版本 session 設定時間週期失效問題,希望可以幫助到有遇到過相同的問題的夥伴,讓你們少走一些彎路   問題場景: 在這是使用 session 快取的時候(檔案快取),設定的時間無效,也就是快取不過期,變成了永久性快取  舉

thinkphp 3.2 服務器 session 設置時間周期失效問題 服務器是linux windows 暫時沒有發現此類問題

最終 你們 權限 效果 .com 二維 都是 地方 說明 今天有時間,寫一下之前 用 TP3.2 版本 session 設置時間周期失效問題,希望可以幫助到有遇到過相同的問題的夥伴,讓你們少走一些彎路 問題場景: 在這是使用 session 緩存的時候(文件緩存),

如何在Linux/Windows安裝ElasticSearch

下載頁面 Linux安裝 在下載頁面選擇macOS/Linux進行下載,解壓後執行your-es-dir/bin/elasticsearch,例如 $ tar -xvf elasticsearch-6

Docker在Linux執行NetCore系列(五)更新應用程式 Docker在Linux/Windows執行NetCore文章系列

轉發請註明此文章作者與路徑,請尊重原著,違者必究。         本篇文章與其它系列文章不同,為了方便測試,新建了一個ASP.Net Core檢視應用。       備註:下面

Docker在Linux執行NetCore系列(一)配置執行DotNetCore控制檯 Docker在Linux/Windows執行NetCore文章系列

原文: Docker在Linux上執行NetCore系列(一)配置執行DotNetCore控制檯 轉發請註明此文章作者與路徑,請尊重原著,違者必究。     系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章作業系

Docker在Linux/Windows執行NetCore文章系列

原文: Docker在Linux/Windows上執行NetCore文章系列   Windows系列 因為Window很簡單,VS提供介面化配置,所以只寫了一篇文章 Docker在Windows上執行NetCore系列(一)使用命令控制檯執行.NetCore控制檯應用  

Docker在Linux執行NetCore系列(四)使用私有Nuget與多個本地包引用執行ASPNetCore Docker在Linux/Windows執行NetCore文章系列

原文: Docker在Linux上執行NetCore系列(四)使用私有Nuget與多個本地包引用執行ASPNetCore   轉發請註明此文章作者與路徑,請尊重原著,違者必究。         本篇文章演示了使用Docke

Docker在Linux執行NetCore系列(二)把本地編譯好的映象釋出到線上阿里雲倉庫 Docker在Linux/Windows執行NetCore文章系列

原文: Docker在Linux上執行NetCore系列(二)把本地編譯好的映象釋出到線上阿里雲倉庫 轉發請註明此文章作者與路徑,請尊重原著,違者必究。   系列文章:https://www.cnblogs.com/alunchen/p/10121379.html  

Docker在Linux執行NetCore系列(三)在Linux使用Docker執行Asp.NetCore Docker在Linux/Windows執行NetCore文章系列

原文: Docker在Linux上執行NetCore系列(三)在Linux上使用Docker執行Asp.NetCore 轉發請註明此文章作者與路徑,請尊重原著,違者必究。   系列文章:https://www.cnblogs.com/alunchen/p/10121379.html

Docker在Windows執行NetCore系列(一)使用命令控制檯執行.NetCore控制檯應用 Docker在Linux/Windows執行NetCore文章系列

原文: Docker在Windows上執行NetCore系列(一)使用命令控制檯執行.NetCore控制檯應用   系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章作業系統資訊     

如何快速生成 UUID GUID

問題的由來:       我們經常會遇到需要一些特殊的值來指定一些特殊的變數,而且這個值要絕對的唯一。在windows下被稱作GUID,其實GUID是微軟對Distributed coumputing environment (DCE) universally uni

[linux]windows編寫的shell指令碼linux上報錯,Bom問題

使用nodepad++編輯好的bash指令碼,在linux上執行就會出出錯。 # /etc/init.d/nginx nginx -bash: /etc/init.d/nginx: /bin/bash^M: bad interpreter: No such file or

Windows生成的shell文件在傳到Linux發現無法執行

code header sed 循環 發現 win localhost 沒有 不一致 為了批量生成shell文件,我在Windows下用knime循環生成一批shell文件,在上傳到Linux上執行時發現報錯: [ft@localhost Stock]$ ./f_wdt_

使用Cygwin在Windows體驗Linux的快感

windows 定義網絡 cut pri efi 程序 dynamic locale markdown 前言 記得大學的時候就以前使用過Cygwin,可惜當時沒有發現她的美,我相信如今大多數朋友可能會更加傾向於使用Git或者幹脆直接使用虛擬機以及原

LinuxWindows獲取當前堆棧信息

flow ces mod exe mode return 開發 執行 too 在編寫穩定可靠的軟件服務時經常用到輸出堆棧信息,以便用戶/開發者獲取準確的運行信息。常用在日誌輸出,錯誤報告,異常檢測。 在Linux有比較簡便的函數獲取堆棧信息: #include <s

windows 用xshell使用 ssh自動登錄linux

xshell key說明:今天來了一個小夥伴,因為業務需要,要登錄一臺測試系統,問我密碼是多少,我說我配置的密鑰登錄的,估計他不太熟悉,所以我簡單的演示了一下配置過程給他看,順便也記錄了下整個配置過程。1、關於密鑰登錄系統的原理 關於配置原理,可以參考https://help.aliyun.com/know

windows面的項目拷貝到Linux環境下報錯不能夠找到對應的表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'puyang.ServiceType' doesn't exist

exce 服務 inux 區分 大小 blog alt logs 就會 將一模一樣的項目從win遷移到到linux上報錯: 一開始還是以為是linux不能識別hql語句,查找資料發現是因為Liunx服務器上mysql是區分大小寫的,而本地是不區分的如:代碼是這樣寫的@En

windows 的RedisClient 連接遠程linux redis ("jave.net.ConnectException: Connection refused:connect")

com bin exce con exceptio refused src .com sed 1、把防火墻禁用掉 2、redis.conf配置文件,註釋掉bind 127.0.0.1 3、重啟redis服務在windows 上的RedisClient 上連接遠程linux

奪命雷公狗---linux NO:30 linux之通過X-Shell在windows傳文件到服務器

效果 目錄 log nbsp linux 服務器 lrzsz 命令 img 。。 其實這很簡單的,在linux 服務器裏安裝插件 lrzsz 即可: 然後在如果想在那個目錄下上傳東西,我們直接使用命令 rz 這樣即可解決問題: 然後回車: 將想上傳的文