Soru GUID'de kaç karakter var?


ASCII kodlamasını kullanarak GUID'de kaç karakter var?

Kıvrımlı parantez ve çizgi içeren Microsoft stili ile ilgileniyorum.


63
2018-03-03 18:59


Menşei


Hepsi aynı uzunluktalar. Karakterleri bir arada sayıyorsanız, hepsinin uzunluğunu bileceksiniz. - Greg Hewgill
@Greg - Bu, uzunluğun değişmeyeceğini anlamazsanız, yapmak için çok zayıf bir varsayımdır. - Adam Davis
Eğer uzunluk değiştiyse, o zaman bu soru, "bir tel parçası ne kadardır?" Diye sormak olurdu. Bunun yerine, "bir düzine kaç yumurta?" Diye soruyor. - Greg Hewgill
Bu soruyu sorduğumda, her cevap bir kılavuzun tanımına işaret ediyordu. İstediğin zaman inanıyorum, ama gelecekteki askerler için gerekli bir sayıma gerek kalmadan, bu ayrılmaz sorunun cevabını bulmayı daha kolay bulmaya çalışıyorum. - Jim Counts
Ne dediğini anlıyorum, ama eğer birisi NewDataX'e yeni girmişse, uzunluk olarak geçerli olan soru geçerli ve gördüğünüz şeyin NewDataX'in ne olduğunu anlayana kadar her NewDataX'ı örneklediğini düşünemezsiniz. - Adam Davis


Cevaplar:


itibaren MSDN:

GUID, oluşan bir 128 bitlik değerdir   8 onaltılık basamaktan oluşan bir grubun   ardından üç grup 4   onaltılık hane her biri, ardından   12 onaltılık basamaktan oluşan bir grup.   Aşağıdaki örnek GUID gösterir   bir onaltılık basamaklı gruplar   GUID:   6B29FC40-CA47-1067-B31D-00DD010662DA

itibaren Vikipedi:

Çoğu zaman parantez eklenir   yukarıdaki gibi, yukarıdaki gibi:

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

Bu yüzden, küme parantezli tipik onaltılık kodlamada toplam 38 karakter.

-Adam


114
2018-03-03 19:02



@magnifico - bu cevabın son paragrafına bakın: "Yani, kıvrık parantez ile tipik onaltılık kodlamada toplam 38 karakter." - Randolpho
Magnifico ile savaşmaya gerek yok - soruyu sordu, en uygun cevabı kimin verdiğine karar verecek. Bunun diğer cevabını tercih etme nedenleri var, eminim. - Adam Davis
Bu bir düzenleme yapıldı. Bu yüzden aşağı oyımı geri çekeceğim. - Jim Counts
@Beska Çünkü Stack Overflow budur. Bir kişiye bir balık teslim etmek yerine, aynı balığı bir milyon insana verin. - bugloaf
@bugloaf Hmm. Her iki yorum da silinen bir şeye atıfta bulunduğundan şüpheleniyorum, çünkü mevcut bağlamda bir anlam ifade etmediler ... ve ilki özellikle bir şey gitmiş. Onlardan kurtuldum. (Şu anki bağlamda, cevaba karşı korkuyorum gibi görünüyordu, bu iyi bir cevaptı, ve benim yapmam için hiç mantıklı gelmeyecek ve doğru bir şekilde çağırıyorsunuz.) - Beska


TL; DR: Yoktur.

Adam Davis'in belirttiği gibi, Microsoft stili, ASCII karakterleri (0-9 ve A-F) alt kümesi kullanılarak görüntülenebilen HEX kodlamasıdır (daha okunaklı hale getirmek için parantez ve tire ile), ancak bu özellikle ASCII kodlaması değildir.

GUID'leri görüntüleyen microsoft stilinin, aslında bir 16 bayt integral değeri olan bir GUID'nin (Micheal Trausch'un belirttiği gibi) bir temsili olduğunu hatırlamak önemlidir.

Baytları farklı bir karakter kümesine (ASCII gibi) dönüştürerek farklı, daha kompakt şekillerde de sunabilirsiniz.

Teorik olarak, her bayt uzun bir ASCII karakteri (255 karakter) olarak görüntüleyebilir, bu da bir GUID değerini 16 karakter uzunluklu bir dize olarak kaydetmenize olanak tanır.

Bu çok okunabilir olmaz, çünkü boşluk karakterleri (CR, boşluk, sekme, vb.) Ve diğer özel karakterleri içerecektir, bu yüzden bir GUID'i insan tarafından okunamayan bir karakter biçiminde verimli bir şekilde kaydetmek istiyorsanız bu yalnızca anlamlı olur Örneğin, GUID'leri doğal olarak desteklemeyen veya küçük ikili değerlerin hızlı eşleşmesini desteklemeyen bir veritabanında: http://en.wikipedia.org/wiki/Extended_ASCII

Bir GUID'i daha kompakt görüntülemenin en okunabilir yolu IMHO, 22 karakterlik bir uzunluğa sahip bir dizeye kaydetmenize izin veren Base64 kodlamasını kullanmaktır ve bu şekilde görünmesini sağlar:

7v26IM9P2kmVepd7ZxuXyQ==

Ancak Jeff Atwood'un sitesinde belirttiği gibi, bir GUID'yi 20 karakterli ASCII85 kodlu bir dizeye de aktarabilirsiniz:

[Rb*hlkkXVW+q4s(YSF0

Daha fazla ilham almak için: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html


27
2017-07-14 15:49



C # içinde bir Ascii-85 kodlayıcı / kod çözücü yayınladım: stackoverflow.com/questions/2827627/... - sheikhjabootie
Eğer bu cevabın başında okuyucuların yemini yapması ve TL olarak davranması için büyük, cesur bir “Yok” olsaydı; ;) - jpmc26
@ jpmc26 iyi fikir, bitti :) - Wiebe Tijsma


Adam, MSDN alıntılarından bahsettiği gibi, UUID'ler 128 bit değerlerdir. Bu, bir değeri tutmak için 16 bayt RAM almaları anlamına gelir. Bir metin gösterimi, 32 bayt (her bir bayt için iki bayt) artı 4 tire, artı bunları eklemek istiyorsanız iki parantez alacaktır; Bu 38 bayt tutar.

UUID'leri yazılımınızın kullanıcılarına göstermeye devam ediyorsanız, UUID'yi parantez ile veya bunlar olmadan sağlayabilirler. Değeri herhangi bir yerde saklıyorsanız, bunu 16 baytlık ikili temsil olarak saklamak en iyisidir. Diğer UUID uygulamalarıyla birlikte çalışıyorsanız, ikili bir UUID değerini saklarken farklı uygulamaların bayt sırasına göre farklı uygulamalar yaptığı için, birlikte çalışabilirlik için temel metin biçimini kullanmak isteyebilirsiniz.


12
2018-03-03 19:06





Uzunluk, kodlamaya bağlıdır. Standart kodlamaları alabilir ve bu snippet ile uzunluklarını ayarlayabilirsiniz:

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

görmek Guid.ToString Yöntemi detaylar için:


4
2018-03-31 15:14