it-swarm.com.ru

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

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

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

68
Jim Counts

От MSDN :

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

От Википедия :

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

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

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

-Адам

117
Adam Davis

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

28
Wiebe Tijsma

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

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

12
Michael Trausch

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

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 для деталей:

4
MovGP0