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.
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.
Antworten:
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
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
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.
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: