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


82

Скільки символів у GUID використовується за допомогою кодування ASCII?

Мене цікавить стиль Microsoft, який включає фігурні дужки та тире.


2
Вони всі однаково довгі. Якщо порахувати символи в одному, ви дізнаєтесь довжину всіх.
Greg Hewgill 03.03.09

1
@Greg - Це дуже погане припущення, якщо ви не розумієте, що довжина не буде змінюватися.
Адам Девіс

8
Якщо довжина варіювалась, то це питання було б подібним до запитання: "скільки довжини шматка?" Натомість тут запитують "скільки яєць на десяток?"
Greg Hewgill 03.03.09

8
Коли я гуглив це питання, кожна відповідь просто вказувала на визначення гіда. Проголосуйте проти мене, якщо хочете, але я просто намагаюся полегшити пошук відповіді на це септичне питання, без необхідності підрахунку для майбутніх запитувачів.
Джим вважає

2
Я розумію, що ви говорите, але якщо хтось щойно був ознайомлений з NewDataX, питання щодо довжини є вірним, і ви не можете припустити, що те, що ви бачили, є прикладом кожного іншого NewDataX, поки ви не зрозумієте, що таке NewDataX.
Адам Девіс

Відповіді:


130

З MSDN :

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

З Вікіпедії :

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

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

Отже, загалом 38 символів у типовому шістнадцятковому кодуванні за допомогою фігурних дужок.

-Адам


@magnifico - див. останній абзац цієї відповіді: "Отже, загалом 38 символів у типовому шістнадцятковому кодуванні з фігурними дужками".
Randolpho

1
Не потрібно битися з Magnifico - він задав питання, він вирішує, хто дав найбільш відповідну відповідь. У нього є свої причини, чому він віддає перевагу іншій відповіді на цю, я впевнений.
Адам Девіс

@Beska, тому що для цього призначений Stack Overflow. Замість того, щоб вручити одній людині рибу, передайте ту саму рибу мільйону людей.
bugloaf

@bugloaf Хм. Я підозрюю, що обидва мої коментарі стосувалися чогось, що було видалено, оскільки вони не мали сенсу в поточному контексті ... і перший з них був конкретно відповіддю на щось, що пішло. Я їх позбувся. (У нинішньому контексті здавалося, що я заперечую проти відповіді, що є гарною відповіддю, і яка для мене не має сенсу робити, і яку ви правильно закликали.)
Беска,

@AdamDavis Я вважаю 32, а не 38. редагувати: ви повинні рахувати фігурні дужки та тире, неважливо.
KyleM

32

TL; DR: немає.

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

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

Ви також можете представити його різними, більш компактними способами, перетворивши байти в інший набір символів (наприклад, 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
Я відправив Ascii-85 кодер / декодер в C # тут: stackoverflow.com/questions/2827627 / ...
sheikhjabootie

1
Якби ця відповідь мала вгорі велике напівжирне "Жодне", щоб приманити читачів і виступати в ролі TL; DR. ;)
jpmc26

14

Як зазначав Адам із цитати MSDN, UUID - це 128-розрядні значення. Це означає, що для збереження значення їм потрібно 16 байт оперативної пам'яті. Текстове представлення займе 32 байти (по два байти на кожен байт), плюс 4 дефіси, плюс дві дужки, якщо ви хочете їх включити; це становить 38 байт.

Тільки майте на увазі, що якщо ви надаєте UUID користувачам вашого програмного забезпечення, вони можуть надавати UUID із дужками або без них. Якщо ви зберігаєте значення де-небудь, найкраще зберегти його як 16-байтове двійкове представлення. Якщо ви взаємодієте з іншими реалізаціями UUID, вам може знадобитися використовувати базовий текстовий формат для взаємодії, оскільки різні реалізації роблять різні речі в порядку байтів при зберіганні двійкового значення UUID.


6

Довжина залежить від кодування. Ви можете отримати стандартне кодування та довжину за допомогою цього фрагмента:

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 :

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.