web-dev-qa-db-fra.com

Combien de caractères y a-t-il dans un GUID?

En utilisant ASCII, combien de caractères y a-t-il dans un GUID?

Je suis intéressé par le style Microsoft, qui comprend les accolades et les tirets.

71
Jim Counts

De MSDN :

Un GUID est une valeur de 128 bits composée d'un groupe de 8 chiffres hexadécimaux, suivi de trois groupes de 4 chiffres hexadécimaux chacun, suivi d'un groupe de 12 chiffres hexadécimaux. L'exemple suivant GUID montre les regroupements de chiffres hexadécimaux dans un GUID: 6B29FC40-CA47-1067-B31D-00DD010662DA

De Wikipedia :

Souvent, des accolades sont ajoutées pour entourer le format ci-dessus, en tant que tel:

{3F2504E0-4F89-11D3-9A0C-0305E82C3301}

Donc un total de 38 caractères dans l'encodage hexadécimal typique avec des accolades.

-Adam

119
Adam Davis

TL; DR: Aucun.

Comme l'a déclaré Adam Davis, le style Microsoft est un encodage HEX (avec des accolades et des tirets pour le rendre plus lisible) qui peut être affiché en utilisant un sous-ensemble de ASCII caractères (0-9 et AF), mais ce n'est pas spécifiquement ASCII encodage.

Je suppose qu'il est important de se rappeler que le style Microsoft d'affichage des GUID n'est qu'une représentation d'un GUID, qui est en fait une valeur intégrale de 16 octets (comme l'a déclaré Micheal Trausch).

Vous pouvez également le présenter de manières différentes et plus compactes en convertissant les octets en un jeu de caractères différent (comme ASCII).

Théoriquement, vous pouvez afficher chaque octet sous la forme d'un caractère ASCII (255 caractères) étendu, ce qui vous permettrait d'enregistrer un GUID sous la forme d'une chaîne de 16 caractères).

Il ne serait cependant pas très lisible car il comprendrait des espaces (CR, espace, tabulation, etc.) et d'autres caractères spéciaux, donc cela n'aurait de sens que si vous souhaitez enregistrer efficacement un GUID = dans un format de caractère non lisible par l'homme, par exemple dans une base de données qui ne prend pas en charge nativement les GUID ou la correspondance rapide de petites valeurs binaires: http://en.wikipedia.org/wiki/Extended_ASCII =

À mon humble avis, la façon la plus lisible d'afficher un GUID plus compact serait d'utiliser l'encodage Base64, qui vous permet de l'enregistrer dans une chaîne de 22 caractères et de le faire ressembler à ceci :

7v26IM9P2kmVepd7ZxuXyQ==

Mais comme Jeff Atwood l'indique sur son site, vous pouvez également pousser un GUID dans une chaîne codée ASCII85 de 20 caractères:

[Rb*hlkkXVW+q4s(YSF0

Pour plus d'inspiration, voir: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html

28
Wiebe Tijsma

Comme Adam l'a mentionné dans le devis MSDN, les UUID sont des valeurs de 128 bits. Cela signifie qu'ils prennent 16 octets de RAM pour contenir une valeur. Une représentation de texte prendra 32 octets (deux octets pour chaque octet unique), plus les 4 tirets, plus les deux crochets si vous souhaitez les inclure, ce qui représente 38 octets.

Gardez à l'esprit que si vous exposez des UUID aux utilisateurs de votre logiciel, ils peuvent fournir l'UUID avec ou sans les crochets. Si vous stockez la valeur n'importe où, il est préférable de la stocker en tant que représentation binaire de 16 octets. Si vous interopérez avec d'autres implémentations UUID, vous souhaiterez peut-être utiliser le format texte de base pour l'interopérabilité, car différentes implémentations font des choses différentes dans l'ordre des octets lors du stockage d'une valeur UUID binaire.

12
Michael Trausch

La longueur dépend du codage. Vous pouvez obtenir les encodages et la longueur standard avec cet extrait:

public void Main() 
{
    var guid = Guid.Empty;
    Write(guid, "N"); // 32 characters
    Write(guid, "D"); // 36 characters (default)
    Write(guid, "B"); // 38 characters
    Write(guid, "P"); // 38 characters
    Write(guid, "X"); // 68 characters
}    

private void Write(Guid guid, string format) 
{
    var guidString = guid.ToString(format);
    Console.WriteLine("{0}: {1} ({2} characters)", format, guidString, guidString.Length);
}

voir la méthode Guid.ToString pour plus de détails:

5
MovGP0