バイト配列から該当する文字列の先頭位置を取得したい
投稿者 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さん、どうもありがとうございます。
最初、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さん、どうもありがとうございます。
{01,00,31,32,41,42,43,FF,0E,4A}
とします。
これらは、アスキーコードであれば
{・,・,1,2,A,B,C,・,・,J}
となります。
ここから、「ABC」とならんでいれば「A」の位置を取得したいと思います。
下記のように、目的は達成されますが、もっと簡単な方法はありませんか。
宜しくお願いします。