guid的獲取(系統下唯一識別符號)

2021-07-16 08:43:47 字數 2541 閱讀 8171

我們經常會遇到需要一些特殊的值來指定一些特殊的變數,而且這個值要絕對的唯一。在windows下被稱作guid,其實guid是微軟對distributed coumputing environment (dce) universally unique identifier 的實現,而在linux下則稱作uuid。

不論它叫什麼名字,表達的意願都是一樣的,以下用guid泛指這一概念。它實際上是乙個包含128位的bit組。那我們到底如何獲取它呢?

先來看看windows平台下如何實現:

通用的guid的結構如下

typedef struct _guid guid;

uuidtostringa

uuidtostringw

uuidfromstringa

uuidfromstringw

舉乙個例子:

假設乙個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字元。

在windows下提供了乙個函式可以生成乙個guid。需要使用的標頭檔案 "objbase.h",需要鏈結的庫ole32.lib。

hresult cocreateguid(guid * pguid);

如果是debian使用者可以方便的通過apt命令來獲取相關資源。

apt-get install uuid-dev

安裝完成後會發現

在/usr/include/ 下有乙個uuid資料夾,其中則包含了uuid.h標頭檔案。

在/usr/lib/ 下有幾個libuuid*的鏈結庫檔案,包括靜態和動態鏈結庫。

開啟uuid.h你會發現有乙個uuid_generate(uuid_t out) 的函式宣告。我們可以通過呼叫這個函式來生成uuid。

uuid_generate(reinterpret_cast(&guid));

生成guid是不是很簡單!是的,因為生成的演算法不用我們去實現,我們是站在前人的肩膀所以我們要感謝他們。

下面給出乙個windows和linux下通用的程式。

// uuid_test.cpp

#include

#include

#include

#include "uuid_test.hpp"

#ifdef win32

#include

#else

#include

#endif

using namespace std;

namespace chinuxteam

std::string guidtostring(const guid &guid)

;#ifdef __gnuc__

snprintf(

#else // msvc

_snprintf_s(

#endif

buf,

sizeof(buf),

"",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);}}

對應的標頭檔案

// uuid_test.hpp"

#include

#include

#include

typedef struct _guid

guid, uuid;

namespace chinuxteam

// namespace chinuxteam

最後乙個 guidtostring()稍微解釋一下,作用就是把guid以固定的格式輸出到標準string字串中,

根據編譯器的不同呼叫分別呼叫了不同的字串列印函式。

另外附乙個簡單的測試函式

#include "uuid_test.hpp"

#include

#include

using namespace std;

using namespace chinuxteam;

int main(int argc, char* argv)

GUID (全域性唯一識別符號)

全域性唯一識別符號 guid,globally unique identifier 是一種由演算法生成的二進位制長度為128位的數字識別符號。guid主要用於在擁有多個節點 多台計算機的網路或系統中。在理想情況下,任何計算機和計算機集群都不會生成兩個相同的guid。guid 的總數達到了2 128 ...

獲取唯一識別符號

ios 2.0版本以後uidevice提供乙個獲取裝置唯一識別符號的方法uniqueidentifier,通過該方法我們可以獲取裝置的序列號,這個也是目前為止唯一可以確認唯一的識別符號。但是,因為該唯一識別符號與手機一一對應,蘋果覺得可能會洩露使用者隱私,所以在ios 5.o之後該方法就被廢棄掉了。...

GUID全域性唯一識別符號相關知識了解

全域性唯一識別符號 guid,globally unique identifier 是一種由演算法生成的二進位制長度為128位的數字識別符號。guid主要用於在擁有多個節點 多台計算機的網路或系統中。在理想情況下,任何計算機和計算機集群都不會生成兩個相同的guid。guid 的總數達到了2 128 ...