単純に連結された一連のレコードであるバイナリ データ ファイルを生成しています。各レコードは、(バイナリ) ヘッダーとそれに続くバイナリ データで構成されます。バイナリ ヘッダー内には、長さ 80 文字の ASCII 文字列があります。途中のどこかで、ファイルを書き込むプロセスが少し混乱したため、各レコードの実際の長さを調べて、この問題をデバッグしようとしています。
これは非常に関連しているようですが、私はperlを理解していないので、そこで受け入れられた答えを得ることができませんでした. 他の回答bgrep
は私がコンパイルしたことを示していますが、16進文字列を入力する必要があり、ASCII文字列を指定できるツールがあればいいのですが、バイナリデータでそれを見つけて、文字列とそれが見つかったバイト オフセット。
つまり、次のようなツールを探しています。
tool foobar filename
また
tool foobar < filename
その出力は次のようなものです。
foobar:10
foobar:410
foobar:810
foobar:1210
...
たとえば、一致した文字列と、一致が開始されたファイル内のバイト オフセット。この例では、各レコードの長さが 400 バイトであると推測できます。
その他の制約:
- 正規表現で検索する機能はクールですが、この問題には必要ありません
- 私のバイナリ ファイルは大きい (3.5Gb) ので、可能であればファイル全体をメモリに読み込まないようにしたいと考えています。