Wie viele Zeichen enthält eine GUID?

81

Wie viele Zeichen enthält eine GUID bei Verwendung der ASCII-Codierung?

Ich interessiere mich für den Microsoft-Stil, der die geschweiften Klammern und Bindestriche enthält.

Jim zählt
quelle
2
Sie sind alle genau gleich lang. Wenn Sie die Zeichen in einem zählen, kennen Sie die Länge aller Zeichen.
Greg Hewgill
1
@ Greg - Das ist eine sehr schlechte Annahme, es sei denn, Sie verstehen, dass die Länge nicht variieren wird.
Adam Davis
8
Wenn die Länge variieren würde, wäre diese Frage wie die Frage: "Wie lang ist ein Stück Schnur?" Stattdessen wird gefragt: "Wie viele Eier in einem Dutzend?"
Greg Hewgill
8
Als ich diese Frage googelte, zeigte jede Antwort nur auf eine Definition eines Leitfadens. Stimmen Sie mich ab, wenn Sie möchten, aber ich versuche nur, die Antwort auf diese spezielle Frage leichter zu finden, ohne dass für zukünftige Fragesteller eine Zählung erforderlich ist.
Jim zählt
2
Ich verstehe, was Sie sagen, aber wenn jemand gerade in NewDataX eingeführt wurde, ist die Frage nach der Länge gültig, und Sie können nicht davon ausgehen, dass das, was Sie gesehen haben, jedes andere NewDataX veranschaulicht, bis Sie verstehen, was ein NewDataX ist.
Adam Davis

Antworten:

130

Von MSDN :

Eine GUID ist ein 128-Bit-Wert, der aus einer Gruppe von 8 hexadezimalen Ziffern besteht, gefolgt von drei Gruppen mit jeweils 4 hexadezimalen Ziffern, gefolgt von einer Gruppe von 12 hexadezimalen Ziffern. Die folgende Beispiel-GUID zeigt die Gruppierungen von hexadezimalen Ziffern in einer GUID: 6B29FC40-CA47-1067-B31D-00DD010662DA

Aus Wikipedia :

Oft werden geschweifte Klammern hinzugefügt, um das obige Format als solches einzuschließen:

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

Insgesamt also 38 Zeichen in der typischen hexadezimalen Codierung mit geschweiften Klammern.

-Adam

Adam Davis
quelle
@magnifico - siehe den letzten Absatz dieser Antwort: "Also insgesamt 38 Zeichen in der typischen hexadezimalen Codierung mit geschweiften Klammern."
Randolpho
1
Keine Notwendigkeit, mit Magnifico zu kämpfen - er stellte die Frage, er kann entscheiden, wer die relevanteste Antwort gegeben hat. Er hat seine Gründe, die andere Antwort dieser vorzuziehen, da bin ich mir sicher.
Adam Davis
@Beska, denn dafür ist Stack Overflow gedacht. Anstatt einer Person einen Fisch zu geben, geben Sie denselben Fisch einer Million Menschen.
Bugloaf
@ Bugloaf Hmm. Ich vermute, meine beiden Kommentare bezogen sich auf etwas, das gelöscht wurde, da sie im aktuellen Kontext keinen Sinn ergaben ... und der erste war ganz spezifisch eine Antwort auf etwas, das weg war. Ich habe sie losgeworden. (Im aktuellen Kontext sah es so aus, als würde ich gegen die Antwort
schimpfen
@AdamDavis Ich zähle 32 nicht 38. Bearbeiten: Sie müssen die geschweiften Klammern und Striche zählen, egal.
KyleM
31

TL; DR: Keine.

Wie Adam Davis feststellte, handelt es sich bei dem Microsoft-Stil um eine HEX-Codierung (mit geschweiften Klammern und Bindestrichen, um die Lesbarkeit zu verbessern), die mit einer Teilmenge von ASCII-Zeichen (0-9 und AF) angezeigt werden kann. Dies ist jedoch keine spezifische ASCII-Codierung.

Ich denke, es ist wichtig, sich daran zu erinnern, dass der Microsoft-Stil der Anzeige von GUIDs nur eine Darstellung einer GUID ist, die tatsächlich ein 16-Byte-Integralwert ist (wie Micheal Trausch feststellte).

Sie können es auch auf verschiedene, kompaktere Arten präsentieren, indem Sie die Bytes in einen anderen Zeichensatz (wie ASCII) konvertieren.

Theoretisch können Sie jedes Byte als erweitertes ASCII-Zeichen (255 Zeichen) anzeigen, wodurch Sie eine GUID als Zeichenfolge mit einer Länge von 16 Zeichen speichern können.

Es wäre jedoch nicht sehr lesbar, da es Leerzeichen (CR, Leerzeichen, Tabulatoren usw.) und andere Sonderzeichen enthalten würde. Dies wäre daher nur dann sinnvoll, wenn Sie eine GUID in einem nicht für Menschen lesbaren Zeichenformat effizient speichern möchten Zum Beispiel in einer Datenbank, die GUIDs oder den schnellen Abgleich kleiner Binärwerte nicht nativ unterstützt: http://en.wikipedia.org/wiki/Extended_ASCII

Meiner Meinung nach wäre die am besten lesbare Möglichkeit, eine GUID kompakter anzuzeigen, die Verwendung der Base64-Codierung, mit der Sie sie in einer Zeichenfolge mit einer Länge von 22 Zeichen speichern und wie folgt aussehen lassen können:

7v26IM9P2kmVepd7ZxuXyQ==

Wie Jeff Atwood auf seiner Website feststellt, können Sie eine GUID auch in eine ASCII85-codierte Zeichenfolge mit 20 Zeichen verschieben:

[Rb*hlkkXVW+q4s(YSF0

Weitere Inspirationen finden Sie unter: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html

Wiebe Tijsma
quelle
3
Ich habe einen Ascii-85-Encoder / Decoder in C # hier gepostet
sheikhjabootie
1
Wenn nur diese Antwort ein großes, kühnes "Keine" an der Spitze hätte, um die Leser anzulocken und als TL; DR zu fungieren. ;)
jpmc26
14

Wie Adam aus dem MSDN-Zitat erwähnte, sind UUIDs 128-Bit-Werte. Dies bedeutet, dass sie 16 Byte RAM benötigen, um einen Wert zu halten. Eine Textdarstellung benötigt 32 Bytes (zwei Bytes für jedes einzelne Byte) plus die 4 Bindestriche plus die zwei Klammern, wenn Sie diese einschließen möchten. Dies entspricht 38 Bytes.

Beachten Sie jedoch, dass Benutzer Ihrer Software möglicherweise UUIDs mit oder ohne Klammern bereitstellen, wenn Sie UUIDs für Benutzer Ihrer Software verfügbar machen. Wenn Sie den Wert irgendwo speichern, speichern Sie ihn am besten als 16-Byte-Binärdarstellung. Wenn Sie mit anderen UUID-Implementierungen zusammenarbeiten, möchten Sie möglicherweise das grundlegende Textformat für die Interoperabilität verwenden, da verschiedene Implementierungen beim Speichern eines binären UUID-Werts unterschiedliche Auswirkungen auf die Reihenfolge der Bytes haben.

Michael Trausch
quelle
6

Die Länge hängt von der Codierung ab. Mit diesem Snippet erhalten Sie die Standardcodierung und -länge:

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);
}

Weitere Informationen finden Sie in der Guid.ToString- Methode:

MovGP0
quelle