• 締切済み

バイナリデータの検索(VB.NET2008)

バイナリファイルを読込み、バイト配列に格納しています。 aaa(0) = 0 aaa(1) = 90 aaa(2) = 0 aaa(3) = 255 aaa(4) = 255 aaa(5) = 0 aaa(6) = 255 この配列から、「FFFF」が見つかった位置を検索したいと考えています。 (上の例で言うと3を取得したい) 現在は配列の最初から最後まで1バイトずつずらして読込み、見つかった場所を特定しています。16進表記の文字列に変換し、文字列として検索する方法も考えましたが、どちらも非効率な気がしています。 他のやり方を知っている方がいましたら教えてください。 [環境] VB2008,XP32SP3

みんなの回答

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

こんなのではどうでしょう? Dim aaa(6) As Byte aaa(0) = 0 aaa(1) = 90 aaa(2) = 0 aaa(3) = 255 aaa(4) = 255 aaa(5) = 0 aaa(6) = 255 Dim idx As Integer = Array.IndexOf(aaa, CByte(255)) MessageBox.Show(idx.ToString)

mana0611
質問者

お礼

お返事ありがとうございます。 やりたいことは連続したバイナリデータの検索です。 VBの文字列検索で言うとInStr関数みたいなのをバイト配列でやろうと思っています。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

例えば、C言語では、文字列は「文字」の配列、文字は「文字を表わす数値」ですから、文字列探索=配列内の一定パターンの探索です。 つまり、今回の場合は、そのまま文字列探索のアルゴリズムを応用する(というかそのまま使う)とよい、ということです。 http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E5%88%97%E6%A4%9C%E7%B4%A2%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0 このあたりのアルゴリズムが使えます。

mana0611
質問者

お礼

そういえばVBのString型も.NETから配列に格納されていた気がします。 まだモヤモヤしていますががんばってみます。 ありがとうございます。

関連するQ&A

  • VB.NETの配列

    こんにちわ。 いまVB.NET2003で開発をしている者です。 たとえば画面で入力された最大400文字(800バイト)の テキストを50文字(100バイト)ずつに区切って, 配列に格納したいのですが, 関数など,効率の良い方法はあるでしょうか? 教えてください。よろしくお願いします。

  • Mscomm を使用してバイナリでデータを受信したい

    Mscommを使用して、垂れ流しデーターをバイナリで受信(受信データ長さは変化する)するとき、このデーターをどうやって、配列に格納していけば良いのでしょうか? (垂れ流しデータ ⇒ < STX >nnn-nnn・・・・< ETX >< CHK >) また、配列に格納したデーターを文字に置き換えるにはどうすれば良いでしょうか? まず考え方として以下の流れでよいでしょうか? バイナリデータをバリアント型の変数に入れる。(受信する)      ↓ このデータを1バイトごとにバイト型変数の配列に入れていく。      ↓ 格納した配列の中の制御文字を取り除く。( ST、EX )      ↓ 配列に入っているデータを文字に変換する。      ↓ 変換した文字をつなぐ。 受信するデーターが制御文字を含んでいる為、テキストで受信するとおかしな動作をすることがあるので(150バイト程度のデーターを、バッファから変数に移すときに、0.5~2.5秒もかかってしまうし、文字化けも時々起こす。)バイナリで受信してその後文字に変換したいのですが・・・。 宜しくお願い致します。

  • バイナリデータの取り方

    VB6を使用して、バイナリファイルをバイナリデータとして文字列にとりたいのですが、全角文字が絡んだ時の処理がうまくいきません。 バイナリファイルをString型の変数に丸ごと読み込んで、後は何バイトから何バイト目を抜き取り数値に変換…という処理をしようとしています。 本来は、バイナリでファイルをオープンして、Getコマンドで取得するのが手っ取り早いのですが、ファイルアクセス回数を減らすため、このような面倒な方法をとっております。 そこで仮に、 dim test as string dim i as integer test = "aあ" & chr(1) & "0 " For i = 1 to 6 Debug.Print Asc(Strconv( _ MidB(Strconv(test,vbFromUnicode),i,1), _ vbUnicode)) Next のようなソースを作ってみました。(本来は文字列は数100KByte…) しかしながら、この方法ですと上の例では2Byte目、つまり「あ」の文字の1Byte目が「&H00」になってしまいます。その次は「&HA0」、他の箇所も問題ないのですが… おそらくは根本的に違う方法で解決すべきではないかと思うのですがその方法がわかりません。 なお、この格納データはバイナリデータなので、意図的に全角文字にしていくてもその値によって(偶然)全角文字になったり制御文字になったりしますので前もって全角文字に対する処理は難しいと考えてます。 質問の仕方が良くなく、質問の内容がなかなかご理解いただけないとは思いますが、ご存知の方、ご経験者の方、ご教授お願いいたします。

  • VBでバイナリエディタを作成について

    VisualBasic6 SP5でバイナリエディタを作成しようとしているのですが、 例えばVariant型に格納したバイナリ文字列を16進表示で表示させたり、その逆の16進数を Variant型の16進数に変換するよい関数はありますか? また、バイナリエディタで良くある右側のテキスト表示ですが、ASCで表示させているだけでしょうか? よろしくお願いいたします。

  • VB6.0でのバイナリデータの扱いについて

    文字コードについて 現在ハンディターミナルとPCとの通信を行うプログラム(VB6.0)を作成しています。      プログラムの一部で下のような記述があります。 ------------------ BCC = Chr(aa) ------------------ 変数aaには数字の226が入り、変数BCCには226に該当する文字列が格納されるはずですが、BCCには文字化けした文字が入り困っています。 調べた結果VB6.0は文字列をunicodeとして扱い、その結果内部的な文字列変換が理由で、文字コード上に存在しない幾つかのバイナリデータは、Chr関数で扱えないというところまではわかりました。 そこでChr命令をChrB命令に変更しましたが、求めている答えが返ってきませんでした。 文字コード表では"DF"までは存在しますが、それ以降の文字は存在しないため扱うのは無理なのでしょうか? StrConvなどを使用すれば可能なのかどうか等考えているのですがわからない状況です。 どなたかご教授願えないでしょうか。宜しくお願い致します。

  • PHPのバイナリ型文字列の取り扱いについて

    お世話になります。 PHPについて困っている事がありまして、ご質問させて頂きます。 現在標準入力でバイナリ型とアスキー型の混ざった文字列を 受け取り処理をするコーディングをしているのですが ------------------------------------------------ FFFF1B ------------------------------------------------ ※FFFF(バイナリ型:2byte)1B(アスキー型:2byte) 上記の文字列を標準入力し、以下のコードを実行すると $fp = fopen("php://stdin", "rb"); $contents = fread($fp, 4); echo $contents; --------------------------------------------- 出力結果 ---------------------------------------------                FFFF _______________________________________________________________________ と表示され、FFFFはバイナリ型なので2バイト(だと思うのですが、、) なのに、php上では4バイトと認識されてしまいます。 どこかおかしい所があればご指摘頂きたく思います。 また、勘違いしている点があれば是非ご指摘くださいます様 宜しくお願いします。 大変お手数ですが宜しくお願いします。

    • ベストアンサー
    • PHP
  • VB バイナリ文字列へ変換

    VBでバイナリ文字列へ変換を行いたいのですが、どうしたら良いでしょうか?

  • フォルダーの中にあるファイルのバイナリデーターの検索を行えるソフトを探

    フォルダーの中にあるファイルのバイナリデーターの検索を行えるソフトを探しています。 環境はwindowsXPです。 フォルダーの中にあるファイルに含まれる特定のバイナリデーターを検索するソフトウェアを探しています。 ファイルを特定のバイナリエディターで開けば検索機能を使って検索できますが、ファイル数が多い場合すべて検索するのは大変です。一度に検索できるソフトはないでしょうか? 文章に含まれる文字列を探すのではなく、例えばexeファイルの中にある文字列を検索する場合バイナリデーターとして検索したいということです。できれば、アスキーかユニコードか指定できるとうれしいです。 文字検索ではなく16進数などで指定して検索でもかまいませんので知っている方は回答よろしくお願いします。

  • バイナリデータの編集

    バイナリデータの編集を行おうとしています。 バイナリエディタ等を使用すれば編集はできるのですが、一文字ずつ(1バイトずつ)編集するのに苦労しています。 エクセルの機能を使って文字列(バイトの列)を編集し、一括で貼り付けたいと思っています。 何か良い方法がありますでしょうか?

  • バイナリファイルの操作(配列の操作について)

    こんにちは。 大変お世話になっております。 配列要素の先頭[0]から[5]までを文字列N、[6]から[1029]までをバイナリデータの計1030バイトの配列要素を使用しています。 [現在行なっている操作方法] 1. Buf[1500]とBuff[1500]を用意 2. fread関数により、Bufに1024バイトずつ格納 3. sprintf関数により、Buffの先頭[0]から[5]まで文字列挿入 4. strcat関数により、BuffとBufを結合 と言う形をとっています。 そこで、sprintfにて先頭から[5]までの文字列を挿入後、先頭から[5]までの配列要素を削除(不要になるため)し、バイナリデータのみにしたいのですが、何か方法はありますでしょうか? NNNNNNDDDDDDDDDDDDDDDDD・・・・・DDDDD←1029番 から NNNNNNを削除し、 DDDDDDD・・・・・DDDDD のみにしたいと思っています。 よろしくお願いします。

専門家に質問してみよう