2015-12-14 20 views
10

Bu kodu denemek için yol açan, son zamanlarda GUID'leri düşünüyordum:Bu iki dizge neden eşit değil?

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

Sen bayt hepsi orada olduğunu görebilirsiniz, ama ben BitConverter.ToString kullandığınızda bunların yarısı yanlış sırada. Bu neden? Microsoft documentation uyarınca

+0

* kör tahminim *: BitConverter & ByteArray birlikte iyi çalışmıyor? –

+1

'guid.ToByteArray()' ** Bu örneğin değerini içeren 16 öğeli bir bayt dizisi döndürür. ** –

+0

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

cevap

11

: geri bayt dizisi bayt sırası bir Guıd değer dizisi gösteriminden farklı olduğu

not edin. Dört baytlık grup ve sonraki iki iki baytlık grupların sırası tersine çevrilirken, son iki bayt grubunun sırası ve kapanış altı bayt grubu aynıdır. Örnek bir örnek sağlar.

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)