128 ビット長のUUIDを変数に格納する必要があります。C++ に 128 ビットのデータ型はありますか? 算術演算は必要ありません。値を簡単に保存して非常に高速に読み取りたいだけです。
C++11 からの新機能も問題ありません。
128 ビット長のUUIDを変数に格納する必要があります。C++ に 128 ビットのデータ型はありますか? 算術演算は必要ありません。値を簡単に保存して非常に高速に読み取りたいだけです。
C++11 からの新機能も問題ありません。
GCC は を提供します__int128
が、128 ビットを保持するのに十分な幅の整数モードを持つターゲット (プロセッサ) に対してのみサポートされます。特定のシステムで sizeof()intmax_t
をuintmax_t
実行し、コンパイラとプラットフォームがサポートする最大値を決定します。
GCC と Clang のサポート__int128
チェックアウトブーストの実装:
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
int128_t v = 1;
これは、特に算術演算を行う必要がある場合は、文字列や配列よりも優れています。
あなたの質問には 2 つの部分があります。
1.128-bit
整数。@PatrikBeckが示唆してboost::multiprecision
いるように、本当に大きな整数には良い方法です。
2.保存する変数UUID
/ GUID
/CLSID
またはあなたがそれを呼ぶものは何でも。この場合boost::multiprecision
、良い考えではありません。そのために設計されたGUID 構造が必要です。クロスプラットフォーム タグが追加されたので、その構造をコードにコピーして、次のようにすることができます。
struct GUID
{
uint32_t Data1;
uint16_t Data2;
uint16_t Data3;
uint8_t Data4[8];
};
この形式は、内部的な理由から Microsoft によって定義されています。次のように簡略化することもできます。
struct GUID
{
uint8_t Data[16];
};
さまざまなものを処理できるオブジェクトよりも、単純な構造の方がパフォーマンスが向上します。とにかく、GUIDS で数学を行う必要はないので、派手なオブジェクトは必要ありません。
テンプレートを使用して、符号付き 128ビット整数または符号なし 128 ビット整数であるために、TBigInteger
このようにテンプレート配列に任意のビット範囲を設定します。TBigInt<128,true>
TBigInt<128,false>
おそらく返信が遅くなり、他の誰かがこの方法をすでに見つけていることを願っています。
TBigInt はUnreal Engineによって定義された構造です。マルチビット整数オーバーライドを提供します。
基本的な使用法(私が知る限り):
#include <Math/BigInt.h>
void foo() {
TBigInt<128, true> signed128bInt = 0;
TBigInt<128, false> unsigned128bInt = 0;
}