web-dev-qa-db-ja.com

ファイルデータをプレーン16進数に変換する方法は?

xddまたはhexdumpを使用して、機械で読み取り可能なプレーンな16進データ(パディング/オフセット/文字ビューなし)との間で簡単に変換する方法

私はいくつかの特別なフォーマットの文字列を掘ったり(そしてそれが突然N文字の後に行を折り返したり、行をスキップしたりすることに気づき)、毎回Perlワンライナーを書くのにうんざりしています。

なぜbase64/base64 -dほど単純ではないのですか?

9
Vi.
 hexdump -e '"%x"' 
 xxd -p | tr -d '\ n' 

毎回thisを書くのに飽きたら、 エイリアス を作成してください。

15
user1686

単純なマシン読み取り可能な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進数としてエンコードされました。

6
RedGrittyBrick

odユーティリティ(coreutilsパッケージの一部)を使用したバージョンは次のとおりです。

od -An < input | tr -dc '[:alnum:]'
2
kenorb