Existe-t-il un entier de 128 bits en C ++?

Je dois stocker un UUID de 128 bits dans une variable. Existe-t-il un type de données 128 bits en C ++? Je n’ai pas besoin d’opérations arithmétiques, je veux juste stocker facilement et lire la valeur très rapidement.

Une nouvelle fonctionnalité de C ++ 11 conviendrait également.

GCC et Clang supportent __int128

Implémentation de Boostout Checkout:

 #include  using namespace boost::multiprecision; int128_t v = 1; 

C’est mieux que les chaînes et les tableaux, surtout si vous devez effectuer des opérations arithmétiques.

Bien que GCC fournisse __int128 , il n’est pris en charge que pour les cibles (processeurs) qui ont un mode entier suffisamment large pour contenir 128 bits. Sur un système donné, sizeof () intmax_t et uintmax_t déterminent la valeur maximale prise en charge par le compilateur et la plateforme.

Votre question comporte deux parties.

1. Entier de 128-bin . Comme suggéré par @PasortingkBeck boost::multiprecision est un bon moyen pour les entiers vraiment gros.

2.Variable pour stocker UUID / GUID / CLSID ou peu importe comment vous l’appelez. Dans ce cas, boost::multiprecision n’est pas une bonne idée. Vous avez besoin d’une structure GUID conçue à cet effet. Comme l’a ajouté le tag multiplate-forme, vous pouvez simplement copier cette structure dans votre code et la rendre similaire à:

 struct GUID { uint32_t Data1; uint16_t Data2; uint16_t Data3; uint8_t Data4[8]; }; 

Ce format est défini par Microsoft pour des raisons internes, vous pouvez même le simplifier pour:

 struct GUID { uint8_t Data[16]; }; 

Vous obtiendrez de meilleures performances avec une structure simple plutôt qu’un object capable de gérer des tas de choses différentes. De toute façon, vous n’avez pas besoin de faire des calculs avec GUIDS, vous n’avez donc pas besoin d’object sophistiqué.