2

最近、テキストファイルを渡され、画像に変換できると言われました。テキストファイルはこんな感じ…

0000000 d8ff e0ff 1000 464a 4649 0100 0001 0100
0000010 0100 0000 e2ff a80c 4349 5f43 5250 464f
0000020 4c49 0045 0101 0000 980c 7061 6c70 1002
...
000d320 8b4c 1b28 3bd4 0016 91e0 799e 34c1 4457
000d330 7113 ee4d cd73 4945 63db d9ff          
000d33c

グーグルで調べたところ、これは .hex ファイルであると確信しています (ただし、オンラインで見た hex ファイルの多くは異なる形式であったため、確信が持てません)。

「16 進数から画像への変換」を検索すると、私のようにフォーマットされた結果は本当にドライです。

これがどのタイプのファイルで、どのように変換して表示可能な画像に戻すことができるかについて、誰かが確信していますか?

ありがとう

4

1 に答える 1

1

これは、ファイルにエンコードされた jpeg ファイルのように見え.hexます。

私はhexファイルの操作に慣れていませんが、最初の 7 桁は基本的に行を数えているように見えます。私はそれらを無視します。役割が正確に何であるかについてのドキュメントを見つけることができると確信しています(もしあれば!)。実際のデータ バイトは、各行の残りの部分でエンコードされるものです。

少し前に、軽量の jpeg エンコーダーを書きました。ソースにアクセスして、ファイルに表示されるバイトがベルを鳴らしたかどうかを確認しました。

ファイルは. d8ff_ _ " は "Start Of File" を表します)。FFDB

次に、e0ff 1000 464a 4649 0100 0001... をコードに書き込みますFFE0 0010 4A46 4946 0001 0100( 127 行目以降を参照)。これは、 JFIF ヘッダーを持つ標準 JPEG ファイルの次のバイトです。

最後に、ファイルの最後の 3 バイトはd9ffであり、jpecFFD9はEnd Of File バイトとして書き込みます。

明らかに、あなたのファイルは私のコードと同じエンディアンで書かれているわけではありません (実際には、これはmid-endian のように見えますが、これまでに実際に見たことはありません...) が、2 バイトのすべてのパケット (4 16 進文字) は、これら 2 バイトの順序を逆にしても同じです! これは明らかにJPEGでエンコードされた画像です...

これを画像として読み取るには、次のようにします。

  1. 各行の最初の 7 桁を単純に削除し、残りのバイトをバイナリ ファイルとして書き込む (この 16 進ファイルのエンディアンがマシンのエンディアンに適合する場合)、または
  2. 最初の 7 桁を取り除き、2 バイトの各パケットの順序を逆にして、マシンのエンディアンが私が Jpec を書いたものに適合する場合は、それをバイナリ ファイルとして書き込みます。

お役に立てれば!

于 2013-08-01T09:10:28.390 に答える