26

バイナリ データに対応する ASCII 値を出力しようとしています。以下のように、ユーティリティを正常に適用して、hexdumphexdump と ASCII を並べて出力しました。

00000120  20 20 20 20 3d 20 30 78  30 30 30 30 30 30 33 30  |    = 0x00000030|
00000130  0a 01 00 00 00 23 00 00  00 75 75 69 64 30 20 20  |.....#...uuid0  |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3d  |               =|
00000150  20 30 78 39 30 38 32 61  63 35 61 0a 01 00 00 00  | 0x9082ac5a.....|
00000160  23 00 00 00 75 75 69 64  31 20 20 20 20 20 20 20  |#...uuid1       |
00000170  20 20 20 20 20 20 20 20  20 20 3d 20 30 78 37 34  |          = 0x74|
00000180  61 37 34 37 36 66 0a 01  00 00 00 23 00 00 00 75  |a7476f.....#...u|
00000190  75 69 64 32 20 20 20 20  20 20 20 20 20 20 20 20  |uid2            |
000001a0  20 20 20 20 20 3d 20 30  78 61 32 35 35 35 63 30  |     = 0xa2555c0|

ただし、ASCII のみを出力値として表示したいと考えています。私は16進値には興味がありません。たとえば、出力は次のようになります (上記にほぼ対応)。

= 0x00000030.....#...
uuid0=0x9082ac5a.....
uuid1=0x74a7476f

(これには のスイッチを使用できませんでしたhd。)

4

4 に答える 4

41

バイナリ ファイルのテキスト コンテンツのみを表示する必要がある場合は、文字列が役立ちます。

指定された各ファイルに対して、GNUstringsは、少なくとも 4 文字 (または-nオプションで指定された数) の長さで、その後に印刷できない文字が続く印刷可能な文字シーケンスを印刷します。 strings主に、テキスト以外のファイルの内容を判断するのに役立ちます。

于 2012-11-08T08:28:59.740 に答える
12

コマンドに関するraina77owからの回答strings(1)は、実際に必要な結果を得るための正しい方法ですが、hexdump(1)印刷可能な文字のみを除外するために活用する特定の要求は、一部のコンテキストでは意味がある場合があります. ここでは具体的にお答えします。

hexdump ユーティリティは、驚くほど汎用化されたフォーマット エンジンをサポートしていることが判明しました。これはおそらく、さまざまな選択可能なフォーマットの実装をより均一にするために行われたものです。hexdump のコピーがそのエンジンを (多くの場合と同様に)-eコマンド ライン オプションを介して公開している場合は、要求したことを実際に実行させることができます。

重要なのは、-eオプションとそれがサポートするフォーマット言語です。その言語では、入力のバイトを消費してテキストを生成するフォーマット文字列を指定できます。次のようなコマンド:

$ hexdump -e "16 \"%_p\" \"\\n\"" hexdump.exe | head -16

一度に 16 バイトを消費し、%_pフォーマットを介して表示し、16 バイトごとに改行を追加します。印刷できない各文字は、出力で a に置き換えられ.ます。

考慮すべきその他の文字指向の形式は%_c、 および%_uです。1 つ目は、表示されない文字を ANSI-C エスケープ シーケンスまたは 3 桁の 8 進数に置き換えます。2 番目は、印刷されない各文字を ASCII 制御文字の従来の名前、または 2 桁の 16 進数で置き換えます。

のコピーにオプションがhexdumpない-e場合、または遅い場合、または の実装がhexdumpまったくない場合は、William Ahern によってhexdump最近リリースされた、自由にライセンスされ、高速で、適度に移植可能な の実装を検討する価値があります。多くの Unix ライクなシステム用にすぐにビルドでき、わずかな調整だけで Windows 上の MingW GCC でビルドできます。この実装の重要な属性は、単一のソース ファイルを別のプログラムに含めるための共有ライブラリとして、Lua から使用するための Lua モジュールとして、およびコマンドを実装するスタンドアロンの実行可能ファイルとして構築できることです。hexdump

于 2013-04-03T00:04:57.403 に答える
7

odを使用できます:

od -t c file

または次awkhexdumpように:

hexdump -C file | awk '{for(i=NF; i>17; --i) print $i}'

注: hexdump の列数を変更する場合は、awk コマンドを変更する必要があります。

于 2012-11-08T07:40:12.233 に答える