バイト配列から該当する文字列の先頭位置を取得したい

タグの編集
投稿者 ねぼすけ  (社会人) 投稿日時 2016/10/31 12:30:51
バイト配列を16進数で表示して

   {01,00,31,32,41,42,43,FF,0E,4A}

とします。
これらは、アスキーコードであれば

   {・,・,1,2,A,B,C,・,・,J}

となります。
ここから、「ABC」とならんでいれば「A」の位置を取得したいと思います。
下記のように、目的は達成されますが、もっと簡単な方法はありませんか。
宜しくお願いします。
        'バイト配列準備 
        Dim data As String() = {"01""00""31""32""41""42""43""FF""0E""4A"}
        Dim byteData(9) As Byte
        Dim i As Integer = 0
        For Each dt As String In data
            byteData(i) = Convert.ToInt32(dt, 16)
            i += 1
        Next
        'ABCの位置を取得する 
        Dim target As String = "ABC"
        Dim address As Integer = 0
        Dim found As Boolean = False
        For i = 0 To byteData.Length - 3
            Dim s1 As String = ChrW(byteData(i))
            Dim s2 As String = ChrW(byteData(i + 1))
            Dim s3 As String = ChrW(byteData(i + 2))
            Dim str As String = s1 & s2 & s3
            If str = target Then
                found = True
                address = i
                Exit For
            End If
        Next
        If found = True Then
            MsgBox("Address=" & address)
        Else
            MsgBox("Not Match!")
        End If
投稿者 shu  (社会人) 投稿日時 2016/10/31 13:38:32
こんな感じでどうでしょう?

        Dim data As String() = {"01""00""31""32""41""42""43""FF""0E""4A"}
        Dim bytData = (From s In data Select Convert.ToByte(s, 16)).ToArray
        Dim strData = System.Text.Encoding.ASCII.GetString(bytData)
        Dim address = strData.IndexOf("ABC")
        Dim address2 = strData.IndexOf("CDE")
        If address >= 0 Then
            MessageBox.Show("Address = " & address)
        Else
            MessageBox.Show("No Match")
        End If
        If address2 >= 0 Then
            MessageBox.Show("Address = " & address2)
        Else
            MessageBox.Show("No Match")
        End If
投稿者 ねぼすけ  (社会人) 投稿日時 2016/10/31 16:44:50
実は、5,571,109 バイトのmp3ファイルで「APIC」文字列を探すことが目的でした。
最初、String型が20億個の文字を蓄えることができるということで
1バイトずつASCII文字に変換し、貯めていくことにしましたが、何せ5,571,109 バイト
一向に終わらなかった。それで断念しました。
Dim strData = System.Text.Encoding.ASCII.GetString(bytData)
の1行で済んだのですね。しかも、
Dim bytData = (From s In data Select Convert.ToByte(s, 16)).ToArray
でバイトデータができてしますのですね。それから、「IndexOf」勉強になりました。
shuさん、どうもありがとうございます。