Сколько символов в GUID? - PullRequest
68 голосов
/ 03 марта 2009

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

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

Ответы [ 4 ]

117 голосов
/ 03 марта 2009

С MSDN :

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

Из Википедия :

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

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

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

-Adam

28 голосов
/ 14 июля 2010

TL; DR: нет.

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

Полагаю, важно помнить, что стиль отображения GUID в Microsoft - это всего лишь представление GUID, которое на самом деле представляет собой 16-байтовое интегральное значение (как заявил Майкл Трауш).

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

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

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

ИМХО, наиболее читаемый способ отображения GUID более компактным - использовать кодировку Base64, которая позволяет сохранить его в строку длиной 22 символа и сделать ее похожей на это:

7v26IM9P2kmVepd7ZxuXyQ==

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

[Rb*hlkkXVW+q4s(YSF0

Для получения дополнительной информации см .: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html

12 голосов
/ 03 марта 2009

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

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

4 голосов
/ 31 марта 2014

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

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 :

...