2010年9月9日木曜日

[.NET]byte.Equals(int)

先日、バイト列の中を検索し、特定のコードが出てくる位置を特定するという処理を組んでいました(共有ファイルのやつね)。コード的には、Array.IndexOfをつかって0x00を探しているのですが、なぜか結果が-1(みつからない)で、もしかして型の違いというのを思い出して、実験してみました。

int.Equals(byte)はtrueなのに、byte.Equals(int)はfalseなんですね。バイト列の検索には要注意ですね。でコードはこんな感じ。

private void button1_Click(object sender, EventArgs e)
{
    var buf = new byte[16] { 0123456789101112131415 };

    var idx = 0;
    //がっかりなコード
    //for (idx = 0; idx < buf.Length; idx++)
    //{
    //    if (buf[idx] == 9)
    //    {
    //        break;
    //    }
    //}

    //残念なコード(-1がかえる)
    //idx = Array.IndexOf(buf, 9);

    //普通のコード
    idx = Array.IndexOf(buf, (byte)9);

    System.Diagnostics.Debug.WriteLine("発見位置=" + idx);

    int int1 = 1;
    byte byte1 = 1;

    System.Diagnostics.Debug.WriteLine("int1==byte1? ->" + (int1 == byte1));
    //int1==byte1? ->Trueと表示される
    System.Diagnostics.Debug.WriteLine("byte1.Equals(int1)? ->" + byte1.Equals(int1));
    //byte1.Equals(int1)? ->False
}

0 件のコメント: