首頁  >  文章  >  後端開發  >  淺談C++產生GUID的兩種方法

淺談C++產生GUID的兩種方法

little bottle
little bottle轉載
2019-04-29 12:22:034613瀏覽

GUID是軟體開發中常用的元件,用於產生唯一的對象,在C#、Java以及Python等語言中,因為它們的標準庫比較豐富,因此GUID的生成比較簡單,往往一兩句程式碼就能搞定。而C 語言本身以及標準函式庫都沒有提供產生GUID的API,因此,無法直接使用C 產生GUID。本文介紹兩種利用C 間接建立GUID的方法:1)呼叫Win32API-CoCreateGuid函數;2)使用Boost函式庫。

使用CoCreateGuid函數

CoCreateGuid是Windows系統本身提供的API函數,位於objbase.h頭檔中,因此,我們必須先包含該頭檔:

include <objbase.h>

呼叫CoCreateGuid的程式碼如下所示:

  GUID guid;
  HRESULT h = CoCreateGuid(&guid);
  if (h == S_OK)
   ans = GuidToString(guid);
  else
   throw runtime_error("generate guid failed!");

上述程式碼中,如果建立GUID成功,則h的值為S_OK,失敗則為其他標誌位元。 HRESULT是COM元件的一類回傳值,請參考HRESULT。 GuidToString函數用於將產生的Guid轉換為std::string。相關教學:C 影片教學

std::string GuidToString(const GUID &guid)
{
 char buf[64] = { 0 };
 sprintf_s(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);
}

這個基於Win32API產生GUID的方法的優點在於不需要依賴其他函式庫,缺點在於無法跨平台,只能在Windows平台的使用。

使用Boost庫

使用Boost庫來產生GUID相對就比較簡單了,程式碼如下:

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>

boost::uuids::uuid uid = boost::uuids::random_generator()();
 const string uid_str = boost::uuids::to_string(uid);
 cout << uid_str << endl;

先載入包,然後使用boost::uuids命名空間下的相關型別和函數就可以建立std::string類型的GUID了。基於BOOST來產生GUID的方法比較簡單,但是缺點是需要額外引進Boost庫。

以上是淺談C++產生GUID的兩種方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除