xdd
またはhexdump
を使用して、機械で読み取り可能なプレーンな16進データ(パディング/オフセット/文字ビューなし)との間で簡単に変換する方法
私はいくつかの特別なフォーマットの文字列を掘ったり(そしてそれが突然N文字の後に行を折り返したり、行をスキップしたりすることに気づき)、毎回Perlワンライナーを書くのにうんざりしています。
なぜbase64
/base64 -d
ほど単純ではないのですか?
単純なマシン読み取り可能な16進データとの間で簡単に変換する方法
簡単に言えば。
$ xxd -plain test.txt> test.hex $ xxd -plain -revert test.hex test2.txt $ diff test.txt test2.txt $
説明:
$ xxd -plain test.txt > test.hex
これにより、test.txtのデータの16進エンコーディングが新しいファイルtest.hexに書き込まれます。 -p
または-plain
オプションを使用すると、xxdは16進数のペアの間にスペースを入れない(つまり、バイト値の間にスペースを入れない)「プレーン」な16進形式を使用します。これにより、「abc ABC」が「61626320414243」に変換されます。 -p
がない場合、テキストは16ビットのWord指向の従来の16進ダンプ形式に変換されます。これは、間違いなく読みやすいですが、コンパクトではないため、送信形式としてはあまり適しておらず、逆にやや困難です。
$ xxd -plain -revert text.hex test2.txt
これは、逆の操作に-r
または-revert
オプションを使用します。 -plain
オプションは、入力16進ファイルがプレーン形式であることを示すために再度使用されます。
後で結果を元のファイルと比較できるように、出力ファイル名を元のファイル名とは異なるものにします。
$ diff test.txt test2.txt
$
Diffコマンドは何も出力しません。つまり、元のファイルの内容と再構成されたファイルの内容に違いはありません。
私はいくつかの特別なフォーマットの文字列を掘るのにうんざりしています
.profileでエイリアスを使用するか、関数を宣言してニーモニックを作成すると、manページで覚えたり、調べたりする必要がなくなります。
または、-plain
と-revert
を覚えておいてください。
ラップされた出力
はい、出力に改行文字が含まれています。あなたはそれを避けたいのです。 -c
または-cols
オプションを使用して、出力の行の折り返しを回避するために出力行の長さを指定できます。 -c 0
はデフォルトの長さを示し、manページは256が制限であることを示唆していますが、それを超えて機能するようです。
$ xxd -plain -cols 9999 test.txt > test.hex
$ wc test.txt test.hex
121 880 4603 test.txt
1 1 9207 test.hex
wc
wordcountコマンドは、各ファイルの行数、単語数、文字数を示します。
したがって、121行(880ワード、4603バイト)のASCIIテキストは、1行の16進数としてエンコードされました。
od
ユーティリティ(coreutils
パッケージの一部)を使用したバージョンは次のとおりです。
od -An < input | tr -dc '[:alnum:]'