ASCII kodlamasını kullanarak, bir GUID'de kaç karakter vardır?
Küme parantezleri ve kısa çizgiler içeren Microsoft stiliyle ilgileniyorum.
ASCII kodlamasını kullanarak, bir GUID'de kaç karakter vardır?
Küme parantezleri ve kısa çizgiler içeren Microsoft stiliyle ilgileniyorum.
Yanıtlar:
Gönderen MSDN :
GUID, 8 onaltılık basamaktan oluşan bir grup, ardından her biri 4 onaltılık basamaktan oluşan üç grup ve ardından 12 onaltılık basamaktan oluşan bir gruptan oluşan 128 bitlik bir değerdir. Aşağıdaki örnek GUID, bir GUID'deki onaltılık basamak gruplarını gösterir: 6B29FC40-CA47-1067-B31D-00DD010662DA
Gönderen Vikipedi :
Yukarıdaki biçimi kapsayacak şekilde genellikle parantez eklenir, örneğin:
{3F2504E0-4F89-11D3-9A0C-0305E82C3301}
Yani, kaşlı ayraçlarla tipik onaltılık kodlamada toplam 38 karakter.
-Adam
Adam Davis'in belirttiği gibi, Microsoft stili, ASCII karakterlerinin bir alt kümesi (0-9 ve AF) kullanılarak görüntülenebilen HEX kodlamadır (daha okunabilir hale getirmek için kaşlı ayraçlar ve çizgilerle), ancak bu özellikle ASCII kodlaması değildir.
GUID'leri görüntülemenin microsoft tarzının, aslında 16 baytlık bir integral değer olan (Micheal Trausch'un belirttiği gibi) yalnızca bir GUID'nin bir temsilidir.
Baytları farklı bir karakter setine (ASCII gibi) dönüştürerek bunu farklı, daha kompakt şekillerde de sunabilirsiniz.
Teorik olarak, her baytı genişletilmiş bir ASCII karakteri (255 karakter) olarak görüntüleyebilirsiniz, bu da bir GUID'i 16 karakter uzunluğunda bir dizi olarak kaydetmenize olanak tanır.
Beyaz boşluk karakterleri (CR, boşluk, sekme, vb.) Ve diğer özel karakterleri içereceği için çok okunabilir değildir, bu nedenle bu yalnızca bir GUID'i insan tarafından okunamayan bir karakter biçiminde verimli bir şekilde kaydetmek istiyorsanız mantıklı olacaktır , doğal olarak desteklemeyen bir veritabanında örneğin GUID veya bir küçük ikili değerlerin hızlı eşleştirme: http://en.wikipedia.org/wiki/Extended_ASCII
IMHO, bir GUID'i daha kompakt bir şekilde görüntülemenin en okunabilir yolu, Base64 kodlamasını kullanmaktır; bu, onu 22 karakter uzunluğunda bir dizede kaydetmenize olanak tanır ve aşağıdaki gibi görünmesini sağlar:
7v26IM9P2kmVepd7ZxuXyQ==
Ancak Jeff Atwood'un sitesinde belirttiği gibi, 20 karakterli bir ASCII85 kodlu dizeye bir GUID de aktarabilirsiniz:
[Rb*hlkkXVW+q4s(YSF0
Daha fazla ilham almak için bkz: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html
Adam'ın MSDN teklifinde bahsettiği gibi, UUID'ler 128 bitlik değerlerdir. Bu, bir değeri tutmak için 16 bayt RAM aldıkları anlamına gelir. Metin temsili 32 bayt (her bir bayt için iki bayt), artı 4 kısa çizgi ve bunları eklemek istiyorsanız iki parantez alacaktır; bu 38 bayta karşılık gelir.
UUID'leri yazılımınızın kullanıcılarına ifşa ediyorsanız, UUID'yi parantezli veya parantezsiz sağlayabileceklerini unutmayın. Değeri herhangi bir yerde depoluyorsanız, en iyisi 16 baytlık ikili gösterim olarak saklamaktır. Diğer UUID uygulamalarıyla birlikte çalışıyorsanız, ikili bir UUID değerini depolarken farklı uygulamalar bayt sırasına göre farklı şeyler yaptığından, birlikte çalışabilirlik için temel metin biçimini kullanmak isteyebilirsiniz.
Uzunluk, kodlamaya bağlıdır. Bu kod parçacığı ile standart kodlamayı ve uzunluğu alabilirsiniz:
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);
}
Ayrıntılar için Guid.ToString yöntemine bakın: