#author("2018-11-11T01:00:17+09:00","","")
#navi(../)
* 16進を文字列化したのをバイナリに、バイナリを16進文字列に変換する・xxd [#qf98b6cf]
16進の値が文字列になっているのをバイナリに戻したり、バイナリを16進にする''xxd''というコマンドを紹介します。~
以下の変換になります。
 48656C6C6F0A → Hello
 Hello → 48656C6C6F0A

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 関連記事 [#q7b4efcb]
-[[HEX形式でファイルを見たい・od>逆引きUNIXコマンド/HEX形式でファイルを見たい・od]]
-[[HEX形式でファイルを見たい・hexdump>逆引きUNIXコマンド/HEX形式でファイルを見たい・hexdumpコマンド]]

* 16 進ダンプを作成したり、元に戻したり。 xxd [#p2e1121a]
xxdコマンドのmanを見ると以下のマニュアルが表示されます。
 XXD(1)                               General Commands Manual                               XXD(1)
 
 名前
        xxd - 16 進ダンプを作成したり、元に戻したり。
 
 書式
        xxd -h[elp]
        xxd [options] [infile [outfile]]
        xxd -r[evert] [options] [infile [outfile]]
一番最初に書いた Hello 文字列を16進文字列に変換し、変換した16進文字列をHelloに戻してみます。
 $ echo Hello | xxd -p
 48656c6c6f0a
 $ echo Hello | xxd -p | tr a-f A-F
 48656C6C6F0A
 $ echo 48656c6c6f0a | xxd -r -p
 Hello
 $ echo 48656C6C6F0A | xxd -r -p
 Hello
上記の動作例は、Helloというデータを16進の文字列に変換しています。~
変換した16進文字列をさらにxxdコマンドを使って元のHelloに戻しています。~

Helloとう文字列をバイナリで見ると以下のようになります。~
(最後の0aは改行です。)
 $ echo Hello | hexdump -C
 00000000  48 65 6c 6c 6f 0a             |Hello.|
意図した変換がされているのが確認できます。

* xxdコマンド使用例 [#qeac5fb9]
xxdコマンドの使用例を以下に記します。~
使用するxxdコマンドのオプションは以下の2つです。
 -p | -ps | -postscript | -plain
        ポストスクリプト形式の 16 進ダンプを出力する。別名 プレーン 16 進ダンプ。
 
 -r | -revert
        元に戻す: 16 進ダンプからバイナリ形式に変換 (またはパッチ) します。  ファイルへ出力
        する場合、出力先のファイルは切り詰めされません。   行番号や特定の書式がないプレーン
        16 進ダンプを読み込む場合は、 -r -p を指定してください。空白と改行は無視されます。
リトルエンディアンなどに対応したオプションもありますので、必要な場合はman xxdをして確認して見てください。

** バイナリから16進数文字列 [#a22ece00]
以下はバイナリから16進数文字列に変換するコマンド例です。
- "GNU/Linux" を16進文字列にしてみました。
 $ echo GNU/Linux | xxd -p
 474e552f4c696e75780a
英字を大文字にしたい場合は、trやsedを使用すれば簡単です。
 $ echo GNU/Linux | xxd -p | tr a-f A-F
 474E552F4C696E75780A

ファイルを対象にする場合は、以下のようになります。~
-ファイル内容を16進数の文字列に変換
 $ echo "Hello world." > HelloWorld.txt
 $ xxd -p HelloWorld.txt
 48656c6c6f20776f726c642e0a
- 16進数の文字列変換されたファイルをバイナリに変換
 $ xxd -p HelloWorld.txt > HelloWorld.16
 $ cat HelloWorld.16
 48656c6c6f20776f726c642e0a
 $ xxd -p -r HelloWorld.16 > out.bin
 $ cat out.bin
 Hello world.

以上、バイナリを16進数の文字列に変換、またその逆の文字列化された16進数をバイナリに変換するxxdコマンドの紹介でした。

#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS