Сколько символов в GUID?

Используя кодировку ASCII, сколько символов присутствует в GUID?

Меня интересует стиль Microsoft, в который входят фигурные скобки и тире.

Ответ 1

От MSDN:

GUID - это 128-битное значение, состоящее из одной группы из 8 шестнадцатеричных цифр, затем следуют три группы по 4 шестнадцатеричные цифры, за которыми следуют одна группа из 12 шестнадцатеричных цифр. В следующем примере GUID отображается группировки шестнадцатеричных цифр в GUID: 6B29FC40-CA47-1067-B31D-00DD010662DA

От Wikipedia:

Часто фигурные скобки добавляются, чтобы заключить выше формата, как таковой:

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

Таким образом, в типичной шестнадцатеричной кодировке с фигурными фигурными скобками содержится всего 38 символов.

-Adam

Ответ 2

TL; DR: Нет.

Как сказал Адам Дэвис, стиль Microsoft - это кодировка HEX (с фигурными фигурами и тире, чтобы сделать ее более читаемой), которая может быть отображена с использованием подмножества символов ASCII (0-9 и AF), но это не является специально кодировкой ASCII.

Я думаю, важно помнить, что стиль отображения GUID в Microsoft для Microsoft - это только представление GUID, которое на самом деле представляет собой 16-байтовое целочисленное значение (как заявил Micheal Trausch).

Вы также можете представить его различными, более компактными способами, преобразовывая байты в другой набор символов (например, ASCII).

Теоретически вы можете отображать каждый байт в виде расширенного символа ASCII (255 символов), что позволит вам сохранить идентификатор GUID в виде строки длиной 16 символов.

Это было бы не очень понятно, потому что оно включало бы пробельные символы (CR, пробел, табуляцию и т.д.) и другие специальные символы, поэтому это имело бы смысл, если вы хотите эффективно сохранить GUID в нечеловеке читаемый формат символов, например, в базе данных, которая не поддерживает GUID или быстрое сопоставление небольших двоичных значений: http://en.wikipedia.org/wiki/Extended_ASCII

IMHO самым читаемым способом отображения GUID более компактным было бы использовать кодировку Base64, которая позволяет сохранить ее в строке длиной 22 символа и сделает ее такой:

7v26IM9P2kmVepd7ZxuXyQ==

Но, как утверждает Джефф Этвуд на своем сайте, вы также можете нажать GUID в кодированную строку ASCII85 с 20 символами:

[Rb*hlkkXVW+q4s(YSF0

Для большего вдохновения см.: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html

Ответ 3

Как упоминал Адам из цитаты MSDN, UUID - это 128-битные значения. Это означает, что они берут 16 байт ОЗУ для хранения значения. Текстовое представление займет 32 байта (два байта для каждого байта) плюс четыре дефиса плюс два скобки, если вы хотите их включить; это составляет 38 байт.

Просто имейте в виду, что если вы подвергаете пользователей UUID пользователям своего программного обеспечения, они могут предоставить UUID с или без скобок. Если вы сохраняете значение в любом месте, лучше сохранить его как 16-байтовое двоичное представление. Если вы взаимодействуете с другими реализациями UUID, вы можете использовать базовый текстовый формат для взаимодействия, поскольку различные реализации делают разные вещи в порядке байтов при сохранении двоичного значения UUID.

Ответ 4

Длина зависит от кодировки. Вы можете получить стандартные кодировки и длину с помощью этого фрагмента:

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

Подробнее см. Guid.ToString: