ASCII एन्कोडिंग का उपयोग करके, GUID में कितने वर्ण हैं?
मुझे Microsoft शैली में दिलचस्पी है, जिसमें घुंघराले कोष्ठक और डैश शामिल हैं।
ASCII एन्कोडिंग का उपयोग करके, GUID में कितने वर्ण हैं?
मुझे Microsoft शैली में दिलचस्पी है, जिसमें घुंघराले कोष्ठक और डैश शामिल हैं।
जवाबों:
से MSDN :
एक GUID एक 128-बिट मान है जिसमें 8 हेक्साडेसिमल अंकों के एक समूह शामिल है, इसके बाद 4 हेक्साडेसिमल अंकों के तीन समूहों, 12 हेक्साडेसिमल अंकों के एक समूह के बाद। निम्न उदाहरण GUID एक GUID में हेक्साडेसिमल अंकों के समूह को दर्शाता है: 6B29FC40-CA47-1067-B31D-00DD010662DA
से विकिपीडिया :
अक्सर ब्रेसिज़ को उपरोक्त प्रारूप को संलग्न करने के लिए जोड़ा जाता है, जैसे:
{3F2504E0-4F89-11D3-9A0C-0305E82C3301}
तो घुंघराले ब्रेसिज़ के साथ ठेठ हेक्साडेसिमल एन्कोडिंग में कुल 38 वर्ण।
-Adam
जैसा कि एडम डेविस ने कहा है, 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
जैसा कि एडम ने MSDN उद्धरण से उल्लेख किया है, UUIDs 128-बिट मान हैं। इसका मतलब है कि वे एक मूल्य धारण करने के लिए 16 बाइट्स रैम लेते हैं। एक पाठ प्रतिनिधित्व 32 बाइट्स (प्रत्येक बाइट के लिए दो बाइट्स) लेगा, साथ ही 4 हाइफ़न, और दो ब्रैकेट यदि आप उन्हें शामिल करना चाहते हैं; यह 38 बाइट्स की मात्रा है।
बस यह ध्यान रखें कि यदि आप अपने सॉफ़्टवेयर के उपयोगकर्ताओं को UUIDs दिखा रहे हैं, तो वे कोष्ठक के साथ या उसके बिना UUID प्रदान कर सकते हैं। यदि आप कहीं भी मूल्य जमा कर रहे हैं, तो इसे 16-बाइट बाइनरी प्रतिनिधित्व के रूप में संग्रहीत करना सबसे अच्छा है। यदि आप अन्य यूयूआईडी कार्यान्वयन के साथ इंटरऑपरेट कर रहे हैं, तो आप इंटरऑपरेबिलिटी के लिए मूल पाठ प्रारूप का उपयोग करना चाह सकते हैं, क्योंकि अलग-अलग कार्यान्वयन बाइनरी यूयूआईडी मूल्य को संग्रहीत करते समय बाइट्स के क्रम में अलग-अलग चीजें करते हैं।
लंबाई एन्कोडिंग पर निर्भर करती है। आप इस स्निपेट के साथ मानक एन्कोडिंग और लंबाई प्राप्त कर सकते हैं:
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 जानकारी के लिए विधि: