Ile znaków zawiera identyfikator GUID?

82

Ile znaków zawiera identyfikator GUID przy użyciu kodowania ASCII?

Interesuje mnie styl Microsoftu, który obejmuje nawiasy klamrowe i myślniki.

Jim się liczy
źródło
2
Wszystkie mają dokładnie taką samą długość. Jeśli policzysz znaki w jednym, będziesz znać długość wszystkich z nich.
Greg Hewgill,
1
@Greg - To bardzo kiepskie założenie, chyba że rozumiesz, że długość nie będzie się zmieniać.
Adam Davis,
8
Gdyby długość była różna, to pytanie przypominałoby pytanie „jak długi jest kawałek sznurka?” Zamiast tego pojawia się pytanie „ile jajek na tuzin?”
Greg Hewgill,
8
Kiedy szukałem w Google tego pytania, każda odpowiedź wskazywała tylko na definicję przewodnika. Głosuj na mnie negatywnie, jeśli chcesz, ale staram się tylko, aby odpowiedź na to szczegółowe pytanie była łatwiejsza do znalezienia, bez konieczności liczenia dla przyszłych pytających.
Jim liczy
2
Rozumiem, co mówisz, ale jeśli ktoś właśnie został wprowadzony do NewDataX, pytanie o długość jest ważne i nie możesz zakładać, że to, co widziałeś, jest przykładem każdego innego NewDataX, dopóki nie zrozumiesz, czym jest NewDataX.
Adam Davis,

Odpowiedzi:

130

Z MSDN :

Identyfikator GUID to 128-bitowa wartość składająca się z jednej grupy 8 cyfr szesnastkowych, po której następują trzy grupy po 4 cyfry szesnastkowe każda, po których następuje jedna grupa 12 cyfr szesnastkowych. Poniższy przykładowy identyfikator GUID przedstawia grupy cyfr szesnastkowych w identyfikatorze GUID: 6B29FC40-CA47-1067-B31D-00DD010662DA

Z Wikipedii :

Często dodawane są nawiasy klamrowe, aby ująć powyższy format, na przykład:

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

Łącznie 38 znaków w typowym kodowaniu szesnastkowym z nawiasami klamrowymi.

-Adam

Adam Davis
źródło
@magnifico - zobacz ostatni akapit odpowiedzi: „Łącznie 38 znaków w typowym kodowaniu szesnastkowym z nawiasami klamrowymi”.
Randolpho
1
Nie trzeba walczyć z magnifico - zadał pytanie, sam decyduje, kto udzieli najbardziej trafnej odpowiedzi. Jestem pewien, że ma swoje powody, by preferować inną odpowiedź od tej.
Adam Davis,
@Beska, ponieważ do tego służy Stack Overflow. Zamiast podawać rybę jednej osobie, podaj tę samą rybę milionowi ludzi.
bugloaf
@bugloaf Hmm. Podejrzewam, że oba moje komentarze odnosiły się do czegoś, co zostało usunięte, ponieważ nie miały sensu w obecnym kontekście ... a pierwszy był bardzo konkretną odpowiedzią na coś, co zniknęło. Pozbyłem się ich. (W obecnym kontekście wyglądało na to, że narzekałem na odpowiedź, która jest dobrą odpowiedzią i która nie miałaby dla mnie sensu, a którą słusznie wołałeś.)
Beska
@AdamDavis Liczę 32, a nie 38. edytuj: musisz liczyć nawiasy klamrowe i myślniki, nieważne.
KyleM
31

TL; DR: brak.

Jak stwierdził Adam Davis, styl firmy Microsoft to kodowanie HEX (z nawiasami klamrowymi i myślnikami, aby było bardziej czytelne), które można wyświetlić za pomocą podzbioru znaków ASCII (0-9 i AF), ale nie jest to specjalnie kodowanie ASCII.

Myślę, że ważne jest, aby pamiętać, że styl wyświetlania identyfikatorów GUID firmy Microsoft jest tylko reprezentacją identyfikatora GUID, który jest w rzeczywistości 16-bajtową wartością całkowitą (jak stwierdził Micheal Trausch).

Możesz również przedstawić to na inne, bardziej zwarte sposoby, konwertując bajty na inny zestaw znaków (np. ASCII).

Teoretycznie można wyświetlić każdy bajt jako rozszerzony znak ASCII (255 znaków), co pozwoliłoby na zapisanie identyfikatora GUID jako ciągu o długości 16 znaków.

Nie byłby jednak zbyt czytelny, ponieważ zawierałby znaki spacji (CR, spacja, tabulator itp.) I inne znaki specjalne, więc miałoby to sens tylko wtedy, gdy chcesz efektywnie zapisać identyfikator GUID w formacie nieczytelnym dla człowieka , na przykład w bazie danych, która nie obsługuje natywnie identyfikatorów GUID lub szybkiego dopasowywania małych wartości binarnych: http://en.wikipedia.org/wiki/Extended_ASCII

IMHO najbardziej czytelnym sposobem wyświetlania bardziej zwartego identyfikatora GUID byłoby użycie kodowania Base64, które pozwala zapisać go w ciągu o długości 22 znaków i sprawiłoby, że wyglądałby tak:

7v26IM9P2kmVepd7ZxuXyQ==

Ale, jak twierdzi Jeff Atwood na swojej stronie, możesz również umieścić GUID w łańcuchu zakodowanym w ASCII85 z 20 znakami:

[Rb*hlkkXVW+q4s(YSF0

Więcej inspiracji znajdziesz na: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html

Wiebe Tijsma
źródło
3
Opublikowałem koder / dekoder Ascii-85 w C # tutaj: stackoverflow.com/questions/2827627/…
sheikhjabootie
1
Gdyby tylko ta odpowiedź miała duże, pogrubione „Brak” na górze, aby przynęcić czytelników i działać jako TL; DR. ;)
jpmc26
14

Jak wspomniał Adam w cytacie z MSDN, identyfikatory UUID to wartości 128-bitowe. Oznacza to, że do przechowywania wartości zajmują 16 bajtów pamięci RAM. Reprezentacja tekstowa zajmie 32 bajty (dwa bajty na każdy pojedynczy bajt) plus 4 łączniki plus dwa nawiasy, jeśli chcesz je uwzględnić; to wynosi 38 bajtów.

Pamiętaj tylko, że jeśli ujawniasz identyfikatory UUID użytkownikom swojego oprogramowania, mogą oni podać identyfikator UUID w nawiasach lub bez. Jeśli przechowujesz wartość w dowolnym miejscu, najlepiej zapisać ją jako 16-bajtową reprezentację binarną. Jeśli współdziałasz z innymi implementacjami UUID, możesz chcieć użyć podstawowego formatu tekstowego do współdziałania, ponieważ różne implementacje robią różne rzeczy w kolejności bajtów podczas przechowywania binarnej wartości UUID.

Michael Trausch
źródło
6

Długość zależy od kodowania. Możesz uzyskać standardowe kodowanie i długość za pomocą tego fragmentu:

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

Aby uzyskać szczegółowe informacje, zobacz metodę Guid.ToString :

MovGP0
źródło