2015-12-14 5 views
10

私はこのコードをしようとする私を導いた、最近のGUIDを考えていた:なぜこれらの2つの文字列が等しくないのですか?

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を使用するときにそれらの半分は間違った順序であることがわかります。どうしてこれなの?マイクロソフトdocumentation 1として

+0

*ブラインドの推測*:BitConverter&ByteArrayですが、一緒にうまく動作しないのですか? –

+1

'guid.ToByteArray()' **このインスタンスの値を含む16要素のバイト配列を返します。** –

+0

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

答えて

11

:返されるバイト配列内のバイトの順序は、GUID値の文字列表現は異なること

注意。最初の4バイトグループと次の2つの2バイトグループの順序は逆になりますが、最後の2バイトグループと終了する6バイトグループの順序は同じです。この例はイラストを提供しています。

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) 
関連する問題