2015-12-14 15 views
10

मैं GUIDs के बारे में हाल ही में सोच रहा था, जो मुझे इस कोड की कोशिश करने के लिए नेतृत्व:ये दो स्ट्रिंग बराबर क्यों नहीं हैं?

Guid guid = Guid.NewGuid(); 
Console.WriteLine(guid.ToString()); //prints 6d1dc8c8-cd83-45b2-915f-c759134b93aa 
Console.WriteLine(BitConverter.ToString(guid.ToByteArray())); //prints C8-C8-1D-6D-83-CD-B2-45-91-5F-C7-59-13-4B-93-AA 
bool same=guid.ToString()==BitConverter.ToString(guid.ToByteArray()); //false 
Console.WriteLine(same); 

आपको लगता है कि बाइट्स के सभी देखते हैं देख सकते हैं, लेकिन जब मैं BitConverter.ToString का उपयोग उनमें से आधे गलत क्रम में हैं। ऐसा क्यों है?

+0

* अंधा अनुमान *: BitConverter और bytearray एक साथ अच्छी तरह से काम नहीं करता है? –

+1

'guid.ToByteArray()' ** एक 16-तत्व बाइट सरणी देता है जिसमें इस उदाहरण का मान होता है। ** –

+0

https://msdn.microsoft.com/en-us/library/system.guid.tobytearray (v = vs.110) .aspx –

उत्तर

11

माइक्रोसॉफ्ट documentation के अनुसार:

ध्यान दें कि लौटे बाइट सरणी में बाइट्स की है, ताकि एक Guid मूल्य की स्ट्रिंग प्रतिनिधित्व से अलग है। शुरुआती चार-बाइट समूह और अगले दो दो-बाइट समूहों का क्रम उलट दिया गया है, जबकि अंतिम दो-बाइट समूह और समापन छह-बाइट समूह का क्रम समान है। उदाहरण एक उदाहरण प्रदान करता है।

using System; 

public class Example 
{ 
    public static void Main() 
    { 
     Guid guid = Guid.NewGuid(); 
     Console.WriteLine("Guid: {0}", guid); 
     Byte[] bytes = guid.ToByteArray(); 
     foreach (var byt in bytes) 
     Console.Write("{0:X2} ", byt); 

     Console.WriteLine(); 
     Guid guid2 = new Guid(bytes); 
     Console.WriteLine("Guid: {0} (Same as First Guid: {1})", guid2, guid2.Equals(guid)); 
    } 
} 
// The example displays the following output: 
// Guid: 35918bc9-196d-40ea-9779-889d79b753f0 
// C9 8B 91 35 6D 19 EA 40 97 79 88 9D 79 B7 53 F0 
// Guid: 35918bc9-196d-40ea-9779-889d79b753f0 (Same as First Guid: True) 
संबंधित मुद्दे