いくつかのバイト値を比較しようとしています - ソース A は、「読み取られている」ファイルからのものです。
f = open(fname, "rb")
f_data = f.read()
f.close()
これらのファイルは、数 Kb から数 Mb の大きさになる可能性があります。
ソース B は、既知のパターンの辞書です。
eof_markers = {
'jpg':b'\xff\xd9',
'pdf':b'\x25\x25\x45\x4f\x46',
}
(このリストは、基本的なプロセスが機能するようになると拡張されます)
基本的に、私はファイル (ソース A) を「読み取ろう」としており、パターン リストに一致する最後のバイトをインクリメンタルに検査します。testString = f_data[-counter:]
一致が見つからない場合は、カウンターを 1 増やし、リストに対してパターン マッチを再度試行します。 .
これを機能させるためにさまざまな方法を試しましたが、testStringを正しくインクリメントすることはできますが、さまざまなアプローチでバイトをASCII化して比較を行うエンコードの問題が発生し続けています。
私は少し迷っており、に変更int
するコードをさまよい、予約された値であるなどの過去の問題を取得u
していないため、ASCII 型比較ツールを使用できないなどのことは初めてではありません(結果はb
d9
if format_type in testString:
UnicodeDecodeError: 'ascii' codec can't decode byte a9
私はすべてを整数に変換しようとしましたが、それはこのエラーをスローしていました:ValueError: invalid literal for int() with base 2: '.'
または、16 進バイトValueError: invalid literal for int() with base 10: '.'
に変換しようとしましたtestString
が、取得し続けましたTypeError: hex() argument can't be converted to hex
(これは、私が確信している何よりも私の理解不足です!...)
エンコーディングと 16 進数の比較について説明しているリソースがいくつか見つかりました。完全に理解できるもの、または正しい道を示してくれるものが見つからないだけです。
私はこれに固執していたので、どんな指摘もありがたく受け取っています。