एक GUID में कितने वर्ण हैं?


82

ASCII एन्कोडिंग का उपयोग करके, GUID में कितने वर्ण हैं?

मुझे Microsoft शैली में दिलचस्पी है, जिसमें घुंघराले कोष्ठक और डैश शामिल हैं।


2
वे सभी बिल्कुल एक ही लंबाई के हैं। यदि आप वर्णों को एक में गिनते हैं, तो आप उन सभी की लंबाई जान जाएंगे।
ग्रेग हेवगिल

1
@Greg - यह एक बहुत ही खराब धारणा है, जब तक आप यह नहीं समझते कि लंबाई अलग-अलग नहीं होगी।
एडम डेविस

8
यदि लंबाई भिन्न होती है, तो यह प्रश्न पूछने की तरह होगा, "स्ट्रिंग का एक टुकड़ा कितना लंबा है?" इसके बजाय, यह पूछ रहा है "एक दर्जन में कितने अंडे?"
ग्रेग हेवगिल

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 वर्ण।

-Adam


@magnifico - इस उत्तर के अंतिम पैराग्राफ को देखें: "तो घुंघराले ब्रेसिज़ के साथ ठेठ हेक्साडेसिमल एन्कोडिंग में कुल 38 वर्ण।"
Randolpho

1
भव्यता के साथ लड़ने की जरूरत नहीं है - उन्होंने सवाल पूछा, वह यह तय करता है कि सबसे प्रासंगिक जवाब किसने दिया। उसके पास इस एक के दूसरे जवाब को प्राथमिकता देने के अपने कारण हैं, मुझे यकीन है।
एडम डेविस

@Beska क्योंकि यही स्टैक ओवरफ्लो है। एक व्यक्ति को एक मछली सौंपने के बजाय, एक ही मछली को एक लाख लोगों को सौंप दें।
Bugloaf 27'13

@bugloaf हम्म। मुझे संदेह है कि मेरी दोनों टिप्पणियां किसी ऐसी चीज के संदर्भ में हैं, जिसे हटा दिया गया है, क्योंकि उन्होंने वर्तमान संदर्भ में कोई मतलब नहीं बनाया है ... और पहले वाला विशेष रूप से कुछ के जवाब में था । मैंने उनसे छुटकारा पा लिया है। (वर्तमान संदर्भ में ऐसा लग रहा था कि मैं उत्तर के खिलाफ रेलिंग कर रहा था, जो एक अच्छा उत्तर है, और जो मुझे करने के लिए कोई मतलब नहीं होगा, और जिसे आप सही ढंग से बुला रहे थे।)
बेस्का

@AdamDavis मैं 32 नहीं 38 की गिनती करता हूं। संपादित करें: आपको ब्रेसिज़ और डैश की गिनती करनी होगी, कभी नहीं।
केलीएम

31

TL; DR: कोई नहीं।

जैसा कि एडम डेविस ने कहा है, Microsoft शैली हेक्स एन्कोडिंग है (ब्रेसिज़ और डैश के साथ इसे और अधिक पठनीय बनाने के लिए) जिसे ASCII वर्ण (0-9 और AF) के सबसेट का उपयोग करके प्रदर्शित किया जा सकता है, लेकिन यह विशेष रूप से ASCII एन्कोडिंग नहीं है।

मुझे लगता है कि यह याद रखना महत्वपूर्ण है कि GUID के प्रदर्शन की microsoft शैली केवल GUID का प्रतिनिधित्व है, जो वास्तव में 16 बाइट का अभिन्न मूल्य है (जैसा कि मिसेल ट्रेक ने कहा था)।

आप इसे बाइट्स को एक अलग वर्ण सेट (जैसे ASCII) में परिवर्तित करके अलग, अधिक कॉम्पैक्ट तरीके से भी प्रस्तुत कर सकते हैं।

सैद्धांतिक रूप से आप प्रत्येक बाइट को एक विस्तारित ASCII चरित्र (255 वर्ण) के रूप में प्रदर्शित कर सकते हैं, जो आपको GUID को 16 वर्ण लंबाई स्ट्रिंग के रूप में सहेजने की अनुमति देगा।

यह बहुत पठनीय नहीं होगा, क्योंकि इसमें व्हाट्सएप अक्षर (सीआर, स्पेस, टैब, आदि) और अन्य विशेष वर्ण शामिल होंगे, इसलिए यह केवल तभी समझ में आएगा जब आप गैर-मानव पठनीय चरित्र प्रारूप में GUID को कुशलतापूर्वक सहेजना चाहते हैं , उदाहरण के लिए, एक डेटाबेस में जो मूल रूप से GUID या छोटे बाइनरी मानों के तेजी से मिलान का समर्थन नहीं करता है: http://en.wikipedia.org/wiki/Extended_ASCII

एक GUID को और अधिक कॉम्पैक्ट दिखाने के लिए IMHO सबसे पठनीय तरीका है, Base64 एन्कोडिंग का उपयोग करना, जो आपको इसे 22 अक्षरों की लंबाई के साथ एक स्ट्रिंग में सहेजने की अनुमति देता है, और यह इस तरह दिखाई देगा:

7v26IM9P2kmVepd7ZxuXyQ==

लेकिन जेफ एटवुड अपनी साइट पर कहते हैं, आप एक GUID को 20 वर्णों के साथ ASCII85 एन्कोडेड स्ट्रिंग में धकेल सकते हैं:

[Rb*hlkkXVW+q4s(YSF0

अधिक प्रेरणा के लिए, देखें: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html


3
मैंने C # में Ascii-85 एनकोडर / डिकोडर पोस्ट किया: stackoverflow.com/questions/2827627/…
sheikhjabootie

1
यदि केवल इस उत्तर में पाठकों को चारा देने और टीएल के रूप में कार्य करने के लिए शीर्ष पर एक बड़ा, बोल्ड "कोई नहीं" होता; ;)
jpmc26

14

जैसा कि एडम ने MSDN उद्धरण से उल्लेख किया है, UUIDs 128-बिट मान हैं। इसका मतलब है कि वे एक मूल्य धारण करने के लिए 16 बाइट्स रैम लेते हैं। एक पाठ प्रतिनिधित्व 32 बाइट्स (प्रत्येक बाइट के लिए दो बाइट्स) लेगा, साथ ही 4 हाइफ़न, और दो ब्रैकेट यदि आप उन्हें शामिल करना चाहते हैं; यह 38 बाइट्स की मात्रा है।

बस यह ध्यान रखें कि यदि आप अपने सॉफ़्टवेयर के उपयोगकर्ताओं को UUIDs दिखा रहे हैं, तो वे कोष्ठक के साथ या उसके बिना UUID प्रदान कर सकते हैं। यदि आप कहीं भी मूल्य जमा कर रहे हैं, तो इसे 16-बाइट बाइनरी प्रतिनिधित्व के रूप में संग्रहीत करना सबसे अच्छा है। यदि आप अन्य यूयूआईडी कार्यान्वयन के साथ इंटरऑपरेट कर रहे हैं, तो आप इंटरऑपरेबिलिटी के लिए मूल पाठ प्रारूप का उपयोग करना चाह सकते हैं, क्योंकि अलग-अलग कार्यान्वयन बाइनरी यूयूआईडी मूल्य को संग्रहीत करते समय बाइट्स के क्रम में अलग-अलग चीजें करते हैं।


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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.