ホームページ > バックエンド開発 > C#.Net チュートリアル > C++ で GUID を生成する 2 つの方法についての簡単な説明

C++ で GUID を生成する 2 つの方法についての簡単な説明

little bottle
リリース: 2019-04-29 12:22:03
転載
4661 人が閲覧しました

GUID はソフトウェア開発で一般的に使用されるコンポーネントであり、C#、Java、Python などの言語で一意のオブジェクトを生成するために使用されます。標準ライブラリは比較的豊富であるため、GUID の生成は比較的単純で、多くの場合 1 ~ 2 行のコードで実行できます。 C 言語自体にも標準ライブラリにも GUID を生成するための API が用意されていないため、C を使用して GUID を直接生成することはできません。この記事では、C を使用して GUID を間接的に作成する 2 つの方法、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 になり、失敗した場合は 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 を生成するこの方法の利点は、他のライブラリに依存する必要がないことです。欠点は、相互に使用できないことです。 -platform であり、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;
ログイン後にコピー

最初にパッケージをロードし、次にブースト ライブラリを使用します。 ::uuids 名前空間 関連する型と関数は、std::string 型の GUID を作成できます。 BOOST に基づいて GUID を生成する方法は比較的単純ですが、追加の Boost ライブラリを導入する必要があるという欠点があります。

以上がC++ で GUID を生成する 2 つの方法についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート